Brion VIBBER has submitted this change and it was merged.

Change subject: First pass at credits page.
......................................................................


First pass at credits page.

Temporary menu entry and icon at bottom of main menu.
Tapping on items loads respective urls in Safari.

Change-Id: I0960284c1186630d6db75c50234d1088148e1aba
---
M Wikipedia.xcodeproj/project.pbxproj
M wikipedia/Base.lproj/Main_iPhone.storyboard
A wikipedia/View Controllers/Credits/CreditsViewController.h
A wikipedia/View Controllers/Credits/CreditsViewController.m
M wikipedia/View Controllers/MainMenu/MainMenuViewController.m
M wikipedia/View Controllers/TopNav/NavController.h
M wikipedia/View Controllers/TopNav/NavController.m
M wikipedia/en.lproj/Localizable.strings
8 files changed, 337 insertions(+), 7 deletions(-)

Approvals:
  Brion VIBBER: Verified; Looks good to me, approved



diff --git a/Wikipedia.xcodeproj/project.pbxproj 
b/Wikipedia.xcodeproj/project.pbxproj
index 403ea8e..2ee5de9 100644
--- a/Wikipedia.xcodeproj/project.pbxproj
+++ b/Wikipedia.xcodeproj/project.pbxproj
@@ -70,6 +70,7 @@
                043649E018E2573E00B528DB /* main_menu_save.png in Resources */ 
= {isa = PBXBuildFile; fileRef = 043649BE18E2573E00B528DB /* main_menu_save.png 
*/; };
                043649E218E2573E00B528DB /* main_menu_s...@2x.png in Resources 
*/ = {isa = PBXBuildFile; fileRef = 043649BF18E2573E00B528DB /* 
main_menu_s...@2x.png */; };
                043C668A18BE9A8E00580E9B /* PreviewWikiTextOp.m in Sources */ = 
{isa = PBXBuildFile; fileRef = 043C668918BE9A8E00580E9B /* PreviewWikiTextOp.m 
*/; };
+               043DAC4B1901C3EE001CD17C /* CreditsViewController.m in Sources 
*/ = {isa = PBXBuildFile; fileRef = 043DAC4A1901C3EE001CD17C /* 
CreditsViewController.m */; };
                043F18E118D9691D00D8489A /* TopActionSheetLabel.m in Sources */ 
= {isa = PBXBuildFile; fileRef = 043F18DC18D9691D00D8489A /* 
TopActionSheetLabel.m */; };
                043F18E518D9691D00D8489A /* 
UINavigationController+TopActionSheet.m in Sources */ = {isa = PBXBuildFile; 
fileRef = 043F18E018D9691D00D8489A /* UINavigationController+TopActionSheet.m 
*/; };
                043F18E918D9885F00D8489A /* TitleSubtitleView.m in Sources */ = 
{isa = PBXBuildFile; fileRef = 043F18E818D9885F00D8489A /* TitleSubtitleView.m 
*/; };
@@ -284,6 +285,8 @@
                043649BF18E2573E00B528DB /* main_menu_s...@2x.png */ = {isa = 
PBXFileReference; lastKnownFileType = image.png; path = 
"main_menu_s...@2x.png"; sourceTree = "<group>"; };
                043C668818BE9A8E00580E9B /* PreviewWikiTextOp.h */ = {isa = 
PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = 
PreviewWikiTextOp.h; sourceTree = "<group>"; };
                043C668918BE9A8E00580E9B /* PreviewWikiTextOp.m */ = {isa = 
PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path 
= PreviewWikiTextOp.m; sourceTree = "<group>"; };
+               043DAC491901C3EE001CD17C /* CreditsViewController.h */ = {isa = 
PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = 
CreditsViewController.h; sourceTree = "<group>"; };
+               043DAC4A1901C3EE001CD17C /* CreditsViewController.m */ = {isa = 
PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path 
= CreditsViewController.m; sourceTree = "<group>"; };
                043F18DB18D9691D00D8489A /* TopActionSheetLabel.h */ = {isa = 
PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = 
TopActionSheetLabel.h; sourceTree = "<group>"; };
                043F18DC18D9691D00D8489A /* TopActionSheetLabel.m */ = {isa = 
PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path 
= TopActionSheetLabel.m; sourceTree = "<group>"; };
                043F18DF18D9691D00D8489A /* 
UINavigationController+TopActionSheet.h */ = {isa = PBXFileReference; 
fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = 
"UINavigationController+TopActionSheet.h"; sourceTree = "<group>"; };
@@ -731,6 +734,15 @@
                        path = TopNav;
                        sourceTree = "<group>";
                };
+               043DAC481901C3D2001CD17C /* Credits */ = {
+                       isa = PBXGroup;
+                       children = (
+                               043DAC491901C3EE001CD17C /* 
CreditsViewController.h */,
+                               043DAC4A1901C3EE001CD17C /* 
CreditsViewController.m */,
+                       );
+                       path = Credits;
+                       sourceTree = "<group>";
+               };
                043F18DA18D9691D00D8489A /* TopActionSheet */ = {
                        isa = PBXGroup;
                        children = (
@@ -959,6 +971,7 @@
                        children = (
                                04A97E8418B81D440046B166 /* AccountCreation */,
                                04B7B9BA18B5569600A63551 /* Captcha */,
+                               043DAC481901C3D2001CD17C /* Credits */,
                                04B9C42618CE5D25003B5058 /* EditSummary */,
                                0447861F185145090050563B /* History */,
                                041A3B5718E11ED90079FF1C /* Languages */,
@@ -1569,6 +1582,7 @@
                                041A3B5E18E11ED90079FF1C /* LanguagesCell.m in 
Sources */,
                                04D34DD91863F70A00610A87 /* Section.m in 
Sources */,
                                04C8781018F4A42700FA3B99 /* 
AccountCreationTokenOp.m in Sources */,
+                               043DAC4B1901C3EE001CD17C /* 
CreditsViewController.m in Sources */,
                                D42E75EB18D11237002EA7E5 /* MWLanguageInfo.m in 
Sources */,
                                04A81E8618871EB000EEBADB /* 
Section+ImageRecords.m in Sources */,
                                047FF5471889078C009DB293 /* Image+Convenience.m 
in Sources */,
diff --git a/wikipedia/Base.lproj/Main_iPhone.storyboard 
b/wikipedia/Base.lproj/Main_iPhone.storyboard
index 27be88e..0ea82c3 100644
--- a/wikipedia/Base.lproj/Main_iPhone.storyboard
+++ b/wikipedia/Base.lproj/Main_iPhone.storyboard
@@ -606,6 +606,154 @@
             </objects>
             <point key="canvasLocation" x="1104" y="1317"/>
         </scene>
+        <!--Credits View Controller-->
+        <scene sceneID="5Ik-j0-hCD">
+            <objects>
+                <viewController restorationIdentifier="CreditsViewController" 
storyboardIdentifier="CreditsViewController" id="myl-z3-aa0" 
customClass="CreditsViewController" sceneMemberID="viewController">
+                    <layoutGuides>
+                        <viewControllerLayoutGuide type="top" id="Cq6-KC-8bv"/>
+                        <viewControllerLayoutGuide type="bottom" 
id="jJw-w1-zeH"/>
+                    </layoutGuides>
+                    <view key="view" contentMode="scaleToFill" id="XBS-Es-znJ">
+                        <rect key="frame" x="0.0" y="0.0" width="320" 
height="568"/>
+                        <autoresizingMask key="autoresizingMask" 
flexibleMaxX="YES" flexibleMaxY="YES"/>
+                        <subviews>
+                            <scrollView clipsSubviews="YES" 
multipleTouchEnabled="YES" contentMode="scaleToFill" 
translatesAutoresizingMaskIntoConstraints="NO" id="qEv-qB-FRv">
+                                <rect key="frame" x="0.0" y="0.0" width="320" 
height="568"/>
+                                <autoresizingMask key="autoresizingMask" 
flexibleMaxX="YES" flexibleMinY="YES"/>
+                                <subviews>
+                                    <view contentMode="scaleToFill" 
translatesAutoresizingMaskIntoConstraints="NO" id="ULA-VS-Px0">
+                                        <rect key="frame" x="0.0" y="0.0" 
width="320" height="388"/>
+                                        <autoresizingMask 
key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
+                                        <subviews>
+                                            <label opaque="NO" 
clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" 
horizontalHuggingPriority="251" verticalHuggingPriority="251" text="credits" 
textAlignment="center" lineBreakMode="wordWrap" numberOfLines="0" 
baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" 
preferredMaxLayoutWidth="280" translatesAutoresizingMaskIntoConstraints="NO" 
id="ieH-d1-Ds7">
+                                                <rect key="frame" x="20" 
y="40" width="280" height="21"/>
+                                                <autoresizingMask 
key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
+                                                <constraints>
+                                                    <constraint 
firstAttribute="width" constant="280" id="Na3-NC-NRz"/>
+                                                </constraints>
+                                                <fontDescription 
key="fontDescription" type="boldSystem" pointSize="17"/>
+                                                <nil key="highlightedColor"/>
+                                            </label>
+                                            <label opaque="NO" 
clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" 
horizontalHuggingPriority="251" verticalHuggingPriority="251" text="wikimedia" 
textAlignment="center" lineBreakMode="wordWrap" numberOfLines="0" 
baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" 
preferredMaxLayoutWidth="280" translatesAutoresizingMaskIntoConstraints="NO" 
id="5KU-bp-5Fs">
+                                                <rect key="frame" x="20" 
y="91" width="280" height="21"/>
+                                                <autoresizingMask 
key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
+                                                <constraints>
+                                                    <constraint 
firstAttribute="width" constant="280" id="WRH-2x-NwJ"/>
+                                                </constraints>
+                                                <fontDescription 
key="fontDescription" type="boldSystem" pointSize="17"/>
+                                                <nil key="highlightedColor"/>
+                                            </label>
+                                            <label opaque="NO" 
clipsSubviews="YES" contentMode="left" horizontalHuggingPriority="251" 
verticalHuggingPriority="251" text="main repo" lineBreakMode="wordWrap" 
numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" 
preferredMaxLayoutWidth="280" translatesAutoresizingMaskIntoConstraints="NO" 
id="gzT-kN-7kp">
+                                                <rect key="frame" x="20" 
y="132" width="280" height="21"/>
+                                                <autoresizingMask 
key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
+                                                <constraints>
+                                                    <constraint 
firstAttribute="width" constant="280" id="lKk-3W-MB7"/>
+                                                </constraints>
+                                                <fontDescription 
key="fontDescription" type="system" pointSize="17"/>
+                                                <nil key="highlightedColor"/>
+                                            </label>
+                                            <label opaque="NO" 
clipsSubviews="YES" contentMode="left" horizontalHuggingPriority="251" 
verticalHuggingPriority="251" text="github repo" lineBreakMode="wordWrap" 
numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" 
preferredMaxLayoutWidth="280" translatesAutoresizingMaskIntoConstraints="NO" 
id="3gs-D6-glW">
+                                                <rect key="frame" x="20" 
y="173" width="280" height="21"/>
+                                                <autoresizingMask 
key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
+                                                <constraints>
+                                                    <constraint 
firstAttribute="width" constant="280" id="xsY-AA-RGV"/>
+                                                </constraints>
+                                                <fontDescription 
key="fontDescription" type="system" pointSize="17"/>
+                                                <nil key="highlightedColor"/>
+                                            </label>
+                                            <label opaque="NO" 
clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" 
horizontalHuggingPriority="251" verticalHuggingPriority="251" text="external" 
textAlignment="center" lineBreakMode="wordWrap" numberOfLines="0" 
baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" 
preferredMaxLayoutWidth="280" translatesAutoresizingMaskIntoConstraints="NO" 
id="ven-ec-xzg">
+                                                <rect key="frame" x="20" 
y="224" width="280" height="21"/>
+                                                <autoresizingMask 
key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
+                                                <constraints>
+                                                    <constraint 
firstAttribute="width" constant="280" id="9pZ-GE-rBr"/>
+                                                </constraints>
+                                                <fontDescription 
key="fontDescription" type="boldSystem" pointSize="17"/>
+                                                <nil key="highlightedColor"/>
+                                            </label>
+                                            <label opaque="NO" 
clipsSubviews="YES" contentMode="left" horizontalHuggingPriority="251" 
verticalHuggingPriority="251" text="WikiFont" lineBreakMode="wordWrap" 
numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" 
preferredMaxLayoutWidth="280" translatesAutoresizingMaskIntoConstraints="NO" 
id="qQl-8k-ux4">
+                                                <rect key="frame" x="20" 
y="265" width="280" height="21"/>
+                                                <autoresizingMask 
key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
+                                                <constraints>
+                                                    <constraint 
firstAttribute="width" constant="280" id="Cty-XK-Glb"/>
+                                                </constraints>
+                                                <fontDescription 
key="fontDescription" type="system" pointSize="17"/>
+                                                <nil key="highlightedColor"/>
+                                            </label>
+                                            <label opaque="NO" 
clipsSubviews="YES" contentMode="left" horizontalHuggingPriority="251" 
verticalHuggingPriority="251" text="HPPLE" lineBreakMode="wordWrap" 
numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" 
preferredMaxLayoutWidth="280" translatesAutoresizingMaskIntoConstraints="NO" 
id="eSk-uQ-Ran">
+                                                <rect key="frame" x="20" 
y="306" width="280" height="21"/>
+                                                <autoresizingMask 
key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
+                                                <constraints>
+                                                    <constraint 
firstAttribute="width" constant="280" id="vyu-2A-a3C"/>
+                                                </constraints>
+                                                <fontDescription 
key="fontDescription" type="system" pointSize="17"/>
+                                                <nil key="highlightedColor"/>
+                                            </label>
+                                            <label opaque="NO" 
clipsSubviews="YES" contentMode="left" horizontalHuggingPriority="251" 
verticalHuggingPriority="251" text="NSDate-Extensions" lineBreakMode="wordWrap" 
numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" 
preferredMaxLayoutWidth="280" translatesAutoresizingMaskIntoConstraints="NO" 
id="6O2-5x-h41">
+                                                <rect key="frame" x="20" 
y="347" width="280" height="21"/>
+                                                <autoresizingMask 
key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
+                                                <constraints>
+                                                    <constraint 
firstAttribute="width" constant="280" id="Iwk-F6-h8L"/>
+                                                </constraints>
+                                                <fontDescription 
key="fontDescription" type="system" pointSize="17"/>
+                                                <nil key="highlightedColor"/>
+                                            </label>
+                                        </subviews>
+                                        <color key="backgroundColor" white="1" 
alpha="1" colorSpace="custom" customColorSpace="calibratedWhite"/>
+                                        <constraints>
+                                            <constraint 
firstAttribute="centerX" secondItem="6O2-5x-h41" secondAttribute="centerX" 
id="EIq-xZ-kkz"/>
+                                            <constraint 
firstAttribute="centerX" secondItem="ven-ec-xzg" secondAttribute="centerX" 
id="JY2-7J-igk"/>
+                                            <constraint firstItem="gzT-kN-7kp" 
firstAttribute="top" secondItem="5KU-bp-5Fs" secondAttribute="bottom" 
constant="20" id="TDr-V6-jrb"/>
+                                            <constraint firstItem="ieH-d1-Ds7" 
firstAttribute="top" secondItem="ULA-VS-Px0" secondAttribute="top" 
constant="40" id="TgT-z1-cyX"/>
+                                            <constraint 
firstAttribute="centerX" secondItem="ieH-d1-Ds7" secondAttribute="centerX" 
id="Tvt-qg-VEN"/>
+                                            <constraint firstItem="3gs-D6-glW" 
firstAttribute="top" secondItem="gzT-kN-7kp" secondAttribute="bottom" 
constant="20" id="Ucc-Sd-cUw"/>
+                                            <constraint 
firstAttribute="centerX" secondItem="5KU-bp-5Fs" secondAttribute="centerX" 
id="UpL-3N-aXi"/>
+                                            <constraint 
firstAttribute="centerX" secondItem="qQl-8k-ux4" secondAttribute="centerX" 
id="e1J-N7-ngT"/>
+                                            <constraint firstItem="6O2-5x-h41" 
firstAttribute="top" secondItem="eSk-uQ-Ran" secondAttribute="bottom" 
constant="20" id="fbY-ch-ngz"/>
+                                            <constraint firstItem="qQl-8k-ux4" 
firstAttribute="top" secondItem="ven-ec-xzg" secondAttribute="bottom" 
constant="20" id="ker-bq-3OO"/>
+                                            <constraint 
firstAttribute="centerX" secondItem="3gs-D6-glW" secondAttribute="centerX" 
id="pBH-cw-bNf"/>
+                                            <constraint firstItem="5KU-bp-5Fs" 
firstAttribute="top" secondItem="ieH-d1-Ds7" secondAttribute="bottom" 
constant="30" id="r1q-r9-uD6"/>
+                                            <constraint 
firstAttribute="centerX" secondItem="eSk-uQ-Ran" secondAttribute="centerX" 
id="rrs-gS-Ihn"/>
+                                            <constraint firstItem="eSk-uQ-Ran" 
firstAttribute="top" secondItem="qQl-8k-ux4" secondAttribute="bottom" 
constant="20" id="vfW-pJ-nvd"/>
+                                            <constraint 
firstAttribute="bottom" secondItem="6O2-5x-h41" secondAttribute="bottom" 
constant="20" symbolic="YES" id="wuw-9H-qQr"/>
+                                            <constraint 
firstAttribute="centerX" secondItem="gzT-kN-7kp" secondAttribute="centerX" 
id="xzk-5q-Czv"/>
+                                            <constraint firstItem="ven-ec-xzg" 
firstAttribute="top" secondItem="3gs-D6-glW" secondAttribute="bottom" 
constant="30" id="ytD-4S-psy"/>
+                                        </constraints>
+                                    </view>
+                                </subviews>
+                                <constraints>
+                                    <constraint firstItem="ULA-VS-Px0" 
firstAttribute="top" secondItem="qEv-qB-FRv" secondAttribute="top" 
id="5e3-gz-foX"/>
+                                    <constraint firstAttribute="trailing" 
secondItem="ULA-VS-Px0" secondAttribute="trailing" id="7l1-Xx-j8M"/>
+                                    <constraint firstAttribute="bottom" 
secondItem="ULA-VS-Px0" secondAttribute="bottom" constant="80" id="G7i-FS-P8G"/>
+                                    <constraint firstAttribute="width" 
secondItem="ULA-VS-Px0" secondAttribute="width" id="VLV-SK-Sv6"/>
+                                    <constraint firstItem="ULA-VS-Px0" 
firstAttribute="leading" secondItem="qEv-qB-FRv" secondAttribute="leading" 
id="gqk-UN-TvC"/>
+                                </constraints>
+                            </scrollView>
+                        </subviews>
+                        <color key="backgroundColor" white="1" alpha="1" 
colorSpace="custom" customColorSpace="calibratedWhite"/>
+                        <constraints>
+                            <constraint firstAttribute="trailing" 
secondItem="qEv-qB-FRv" secondAttribute="trailing" id="4Ln-Qz-emi"/>
+                            <constraint firstAttribute="bottom" 
secondItem="qEv-qB-FRv" secondAttribute="bottom" id="De2-ZF-dN4"/>
+                            <constraint firstItem="qEv-qB-FRv" 
firstAttribute="top" secondItem="XBS-Es-znJ" secondAttribute="top" 
id="Hmj-4p-eoK"/>
+                            <constraint firstItem="qEv-qB-FRv" 
firstAttribute="leading" secondItem="XBS-Es-znJ" secondAttribute="leading" 
id="sdn-y4-Yyg"/>
+                        </constraints>
+                    </view>
+                    <extendedEdge key="edgesForExtendedLayout" bottom="YES"/>
+                    <connections>
+                        <outlet property="externalLibrariesLabel" 
destination="ven-ec-xzg" id="ipE-Zd-jCl"/>
+                        <outlet property="gerritLabel" 
destination="gzT-kN-7kp" id="8PW-lc-Csn"/>
+                        <outlet property="githubLabel" 
destination="3gs-D6-glW" id="fUX-qN-QZ5"/>
+                        <outlet property="hppleLabel" destination="eSk-uQ-Ran" 
id="qN0-Td-phW"/>
+                        <outlet property="nsdateLabel" 
destination="6O2-5x-h41" id="iCt-hu-Fa8"/>
+                        <outlet property="titleLabel" destination="ieH-d1-Ds7" 
id="X4Z-41-eO2"/>
+                        <outlet property="wikiFontLabel" 
destination="qQl-8k-ux4" id="yBp-Z2-ibr"/>
+                        <outlet property="wikimediaReposLabel" 
destination="5KU-bp-5Fs" id="chD-0j-d6F"/>
+                    </connections>
+                </viewController>
+                <placeholder placeholderIdentifier="IBFirstResponder" 
id="BLG-HG-Go1" userLabel="First Responder" sceneMemberID="firstResponder"/>
+            </objects>
+            <point key="canvasLocation" x="554" y="2885"/>
+        </scene>
         <!--Preview And Save View Controller-->
         <scene sceneID="TJS-xh-DjB">
             <objects>
@@ -711,25 +859,25 @@
                         <viewControllerLayoutGuide type="bottom" 
id="NcO-7E-4V6"/>
                     </layoutGuides>
                     <view key="view" contentMode="scaleToFill" id="2UF-VY-OwF">
-                        <rect key="frame" x="0.0" y="0.0" width="320" 
height="163"/>
+                        <rect key="frame" x="0.0" y="0.0" width="280" 
height="163"/>
                         <autoresizingMask key="autoresizingMask" 
flexibleMaxX="YES" flexibleMaxY="YES"/>
                         <subviews>
                             <imageView userInteractionEnabled="NO" 
contentMode="scaleAspectFit" horizontalHuggingPriority="251" 
verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" 
id="ubi-fl-THX">
-                                <rect key="frame" x="0.0" y="20" width="320" 
height="70"/>
+                                <rect key="frame" x="0.0" y="20" width="280" 
height="70"/>
                                 <autoresizingMask key="autoresizingMask" 
flexibleMaxX="YES" flexibleMaxY="YES"/>
                                 <constraints>
                                     <constraint firstAttribute="height" 
constant="70" id="djK-ra-WHc"/>
                                 </constraints>
                             </imageView>
                             <button opaque="NO" contentMode="scaleToFill" 
contentHorizontalAlignment="center" contentVerticalAlignment="center" 
buttonType="roundedRect" lineBreakMode="wordWrap" 
translatesAutoresizingMaskIntoConstraints="NO" id="21c-U6-yfo">
-                                <rect key="frame" x="0.0" y="100" width="320" 
height="30"/>
+                                <rect key="frame" x="0.0" y="100" width="280" 
height="30"/>
                                 <autoresizingMask key="autoresizingMask" 
flexibleMaxX="YES" flexibleMaxY="YES"/>
                                 <state key="normal" title="Show another 
captcha">
                                     <color key="titleShadowColor" white="0.5" 
alpha="1" colorSpace="calibratedWhite"/>
                                 </state>
                             </button>
                             <textField opaque="NO" clipsSubviews="YES" 
contentMode="scaleToFill" contentHorizontalAlignment="left" 
contentVerticalAlignment="center" borderStyle="roundedRect" placeholder="Enter 
CAPTCHA text from image above" minimumFontSize="17" 
clearButtonMode="whileEditing" translatesAutoresizingMaskIntoConstraints="NO" 
id="gPg-cg-Yjy">
-                                <rect key="frame" x="20" y="140" width="280" 
height="30"/>
+                                <rect key="frame" x="0.0" y="140" width="280" 
height="30"/>
                                 <autoresizingMask key="autoresizingMask" 
flexibleMaxX="YES" flexibleMaxY="YES"/>
                                 <constraints>
                                     <constraint firstAttribute="width" 
constant="280" id="6wn-Hx-rhl"/>
@@ -1091,6 +1239,6 @@
         <simulatedScreenMetrics key="destination" type="retina4"/>
     </simulatedMetricsContainer>
     <inferredMetricsTieBreakers>
-        <segue reference="ca4-hw-8WK"/>
+        <segue reference="HJg-5s-ewq"/>
     </inferredMetricsTieBreakers>
 </document>
diff --git a/wikipedia/View Controllers/Credits/CreditsViewController.h 
b/wikipedia/View Controllers/Credits/CreditsViewController.h
new file mode 100644
index 0000000..68a8fc8
--- /dev/null
+++ b/wikipedia/View Controllers/Credits/CreditsViewController.h
@@ -0,0 +1,18 @@
+//  Created by Monte Hurd on 4/18/14.
+//  Copyright (c) 2013 Wikimedia Foundation. Provided under MIT-style license; 
please copy and modify!
+
+#import <UIKit/UIKit.h>
+
+@interface CreditsViewController : UIViewController
+
+@property (weak, nonatomic) IBOutlet UILabel *titleLabel;
+@property (weak, nonatomic) IBOutlet UILabel *wikimediaReposLabel;
+@property (weak, nonatomic) IBOutlet UILabel *externalLibrariesLabel;
+@property (weak, nonatomic) IBOutlet UILabel *githubLabel;
+@property (weak, nonatomic) IBOutlet UILabel *gerritLabel;
+
+@property (weak, nonatomic) IBOutlet UILabel *wikiFontLabel;
+@property (weak, nonatomic) IBOutlet UILabel *hppleLabel;
+@property (weak, nonatomic) IBOutlet UILabel *nsdateLabel;
+
+@end
diff --git a/wikipedia/View Controllers/Credits/CreditsViewController.m 
b/wikipedia/View Controllers/Credits/CreditsViewController.m
new file mode 100644
index 0000000..f8f15b4
--- /dev/null
+++ b/wikipedia/View Controllers/Credits/CreditsViewController.m
@@ -0,0 +1,120 @@
+//  Created by Monte Hurd on 4/18/14.
+//  Copyright (c) 2013 Wikimedia Foundation. Provided under MIT-style license; 
please copy and modify!
+
+#import "CreditsViewController.h"
+#import "WikipediaAppUtils.h"
+#import "NavController.h"
+
+#define NAV ((NavController *)self.navigationController)
+
+@interface CreditsViewController ()
+
+@end
+
+@implementation CreditsViewController
+
+-(void)viewDidAppear:(BOOL)animated
+{
+    [super viewDidAppear:animated];
+    
+    [[NSNotificationCenter defaultCenter] addObserver: self
+                                             selector: 
@selector(navItemTappedNotification:)
+                                                 name: @"NavItemTapped"
+                                               object: nil];
+}
+
+-(void)viewWillDisappear:(BOOL)animated
+{
+    [[NSNotificationCenter defaultCenter] removeObserver: self
+                                                    name: @"NavItemTapped"
+                                                  object: nil];
+
+    NAV.navBarMode = NAVBAR_MODE_SEARCH;
+
+    [super viewWillDisappear:animated];
+}
+
+-(void)viewWillAppear:(BOOL)animated
+{
+    [super viewWillAppear:animated];
+
+    NAV.navBarMode = NAVBAR_MODE_CREDITS;
+}
+
+- (void)navItemTappedNotification:(NSNotification *)notification
+{
+    NSDictionary *userInfo = [notification userInfo];
+    UIView *tappedItem = userInfo[@"tappedItem"];
+
+    switch (tappedItem.tag) {
+        case NAVBAR_BUTTON_ARROW_LEFT:
+            [self.navigationController popViewControllerAnimated:YES];
+            
+            break;
+        default:
+            break;
+    }
+}
+
+- (void)viewDidLoad
+{
+    [super viewDidLoad];
+    // Do any additional setup after loading the view.
+
+    self.navigationItem.hidesBackButton = YES;
+
+    self.titleLabel.text = MWLocalizedString(@"credits-title", nil);
+    self.wikimediaReposLabel.text = 
MWLocalizedString(@"credits-wikimedia-repos", nil);
+    self.externalLibrariesLabel.text = 
MWLocalizedString(@"credits-external-libraries", nil);
+    self.githubLabel.text = MWLocalizedString(@"credits-github-mirror", nil);
+    self.gerritLabel.text = MWLocalizedString(@"credits-gerrit-repo", nil);
+    
+    [self addTapRecognizerToView:self.githubLabel];
+    [self addTapRecognizerToView:self.gerritLabel];
+    [self addTapRecognizerToView:self.wikiFontLabel];
+    [self addTapRecognizerToView:self.hppleLabel];
+    [self addTapRecognizerToView:self.nsdateLabel];
+}
+
+-(void)addTapRecognizerToView:(UIView *)view
+{
+    [view addGestureRecognizer:
+        [[UITapGestureRecognizer alloc] initWithTarget:self 
action:@selector(viewTapped:)]
+     ];
+}
+
+-(void)viewTapped:(UITapGestureRecognizer *)recognizer
+{
+    NSString *url = nil;
+    if (recognizer.view == self.githubLabel) {
+        url = @"https://github.com/wikimedia/apps-ios-wikipedia";;
+    }else if (recognizer.view == self.gerritLabel) {
+        url = 
@"https://gerrit.wikimedia.org/r/#/q/project:apps/ios/wikipedia,n,z";;
+    }else if (recognizer.view == self.wikiFontLabel) {
+        url = @"https://github.com/munmay/WikiFont";;
+    }else if (recognizer.view == self.hppleLabel) {
+        url = @"https://github.com/topfunky/hpple";;
+    }else if (recognizer.view == self.nsdateLabel) {
+        url = @"https://github.com/erica/NSDate-Extensions";;
+    }
+    [[UIApplication sharedApplication] openURL:[NSURL URLWithString:url]];
+}
+
+- (void)didReceiveMemoryWarning
+{
+    [super didReceiveMemoryWarning];
+    // Dispose of any resources that can be recreated.
+}
+
+/*
+#pragma mark - Navigation
+
+// In a storyboard-based application, you will often want to do a little 
preparation before navigation
+- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
+{
+    // Get the new view controller using [segue destinationViewController].
+    // Pass the selected object to the new view controller.
+}
+*/
+
+@end
diff --git a/wikipedia/View Controllers/MainMenu/MainMenuViewController.m 
b/wikipedia/View Controllers/MainMenu/MainMenuViewController.m
index e65b6c7..7e372b5 100644
--- a/wikipedia/View Controllers/MainMenu/MainMenuViewController.m
+++ b/wikipedia/View Controllers/MainMenu/MainMenuViewController.m
@@ -24,6 +24,7 @@
 
 #import "MainMenuRowView.h"
 #import "PageHistoryViewController.h"
+#import "CreditsViewController.h"
 
 #pragma mark - Defines
 
@@ -39,7 +40,8 @@
     ROW_INDEX_SEARCH_LANGUAGE = 5,
     ROW_INDEX_ZERO_WARN_WHEN_LEAVING = 6,
     ROW_INDEX_SEND_FEEDBACK = 7,
-    ROW_INDEX_PAGE_HISTORY = 8
+    ROW_INDEX_PAGE_HISTORY = 8,
+    ROW_INDEX_CREDITS = 9
 } MainMenuRowIndex;
 
 #pragma mark - Private
@@ -277,6 +279,14 @@
           @"imageName": @"main_menu_save.png",
           @"highlighted": @YES,
           }.mutableCopy
+        ,
+      @{
+          @"domain": [SessionSingleton sharedInstance].domain,
+          @"title": MWLocalizedString(@"main-menu-credits", nil),
+          @"tag": @(ROW_INDEX_CREDITS),
+          @"imageName": @"main_menu_foreign_characters_gray.png",
+          @"highlighted": @YES,
+          }.mutableCopy
       ].mutableCopy;
 
     self.rowData = rowData;
@@ -387,6 +397,13 @@
                 [NAV pushViewController:pageHistoryVC animated:YES];
             }
                 break;
+            case ROW_INDEX_CREDITS:
+            {
+                CreditsViewController *creditsVC =
+                    [NAV.storyboard 
instantiateViewControllerWithIdentifier:@"CreditsViewController"];
+                [NAV pushViewController:creditsVC animated:YES];
+            }
+                break;
             default:
                 break;
         }
diff --git a/wikipedia/View Controllers/TopNav/NavController.h b/wikipedia/View 
Controllers/TopNav/NavController.h
index 4f83510..075658a 100644
--- a/wikipedia/View Controllers/TopNav/NavController.h
+++ b/wikipedia/View Controllers/TopNav/NavController.h
@@ -26,7 +26,8 @@
     NAVBAR_MODE_EDIT_WIKITEXT_CAPTCHA = 7,
     NAVBAR_MODE_EDIT_WIKITEXT_SUMMARY = 8,
     NAVBAR_MODE_EDIT_WIKITEXT_LOGIN_OR_SAVE_ANONYMOUSLY = 9,
-    NAVBAR_MODE_PAGE_HISTORY = 10
+    NAVBAR_MODE_PAGE_HISTORY = 10,
+    NAVBAR_MODE_CREDITS = 11
 } NavBarMode;
 
 typedef enum {
diff --git a/wikipedia/View Controllers/TopNav/NavController.m b/wikipedia/View 
Controllers/TopNav/NavController.m
index 6bfdea2..e280487 100644
--- a/wikipedia/View Controllers/TopNav/NavController.m
+++ b/wikipedia/View Controllers/TopNav/NavController.m
@@ -488,6 +488,11 @@
             self.navBarSubViewsHorizontalVFLString =
                 
@"H:|[NAVBAR_BUTTON_ARROW_LEFT(50)][NAVBAR_VERTICAL_LINE_1(singlePixel)]-(10)-[NAVBAR_LABEL]|";
             break;        
+        case NAVBAR_MODE_CREDITS:
+            self.label.text = MWLocalizedString(@"main-menu-credits", nil);
+            self.navBarSubViewsHorizontalVFLString =
+                
@"H:|[NAVBAR_BUTTON_ARROW_LEFT(50)][NAVBAR_VERTICAL_LINE_1(singlePixel)]-(10)-[NAVBAR_LABEL]|";
+            break;        
         default: //NAVBAR_MODE_SEARCH
             self.navBarSubViewsHorizontalVFLString =
                 
@"H:|[NAVBAR_BUTTON_LOGO_W(65)][NAVBAR_VERTICAL_LINE_1(singlePixel)][NAVBAR_TEXT_FIELD]-(10)-|";
diff --git a/wikipedia/en.lproj/Localizable.strings 
b/wikipedia/en.lproj/Localizable.strings
index 37bbd7d..86333b6 100644
--- a/wikipedia/en.lproj/Localizable.strings
+++ b/wikipedia/en.lproj/Localizable.strings
@@ -76,6 +76,7 @@
 "main-menu-feedback-heading" = "Feedback";
 "main-menu-send-feedback" = "Send feedback";
 "main-menu-show-page-history" = "History of changes to $1";
+"main-menu-credits" = "Credits";
 
 "saved-pages-title" = "Saved pages";
 "page-history-title" = "Page history";
@@ -109,3 +110,9 @@
 
 "article-pull-to-refresh-prompt" = "Pull to refresh article";
 "article-pull-to-refresh-is-refreshing" = "Refreshing article";
+
+"credits-title" = "Open source repositories";
+"credits-wikimedia-repos" = "Wikimedia";
+"credits-gerrit-repo" = "App main (Gerrit)";
+"credits-github-mirror" = "App mirror (GitHub)";
+"credits-external-libraries" = "External";

-- 
To view, visit https://gerrit.wikimedia.org/r/127798
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: merged
Gerrit-Change-Id: I0960284c1186630d6db75c50234d1088148e1aba
Gerrit-PatchSet: 1
Gerrit-Project: apps/ios/wikipedia
Gerrit-Branch: master
Gerrit-Owner: Mhurd <mh...@wikimedia.org>
Gerrit-Reviewer: Brion VIBBER <br...@wikimedia.org>
Gerrit-Reviewer: Mhurd <mh...@wikimedia.org>

_______________________________________________
MediaWiki-commits mailing list
MediaWiki-commits@lists.wikimedia.org
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to