@recaptime-dev's working patches + fork for Phorge, a community fork of Phabricator. (Upstream dev and stable branches are at upstream/main and upstream/stable respectively.) hq.recaptime.dev/wiki/Phorge
phorge phabricator
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

Phortune Carts and Purchases

Summary:
Ref T2787. Make carts and purchases real objects, with storage, that kind-of work.

Roughly, the idea here is that applications create "purchases" (like "1 large t-shirt") and add them to "carts" (a user can have a lot of different carts at the same time), then hand things off to Phortune to deal with actualy charging a card. Roughly this works like Paypal or other similar systems do, except Phortune is the thing the user gets handed off to.

This doesn't do anything interesting/useful yet.

Also fix some bugs and update some UI.

Test Plan: Added a product to a cart, saw it in cart screen.

Reviewers: btrahan, chad

Reviewed By: chad

Subscribers: epriestley

Maniphest Tasks: T2787

Differential Revision: https://secure.phabricator.com/D10001

+1336 -985
+929 -929
resources/celerity/map.php
··· 836 836 ), 837 837 'requires' => array( 838 838 '00861799' => array( 839 - 0 => 'javelin-behavior', 840 - 1 => 'javelin-stratcom', 841 - 2 => 'javelin-dom', 842 - 3 => 'javelin-util', 843 - 4 => 'javelin-vector', 844 - 5 => 'differential-inline-comment-editor', 839 + 'javelin-behavior', 840 + 'javelin-stratcom', 841 + 'javelin-dom', 842 + 'javelin-util', 843 + 'javelin-vector', 844 + 'differential-inline-comment-editor', 845 845 ), 846 846 '029a133d' => array( 847 - 0 => 'aphront-dialog-view-css', 847 + 'aphront-dialog-view-css', 848 848 ), 849 849 '03d6ed07' => array( 850 - 0 => 'javelin-behavior', 851 - 1 => 'javelin-stratcom', 852 - 2 => 'javelin-dom', 853 - 3 => 'javelin-vector', 854 - 4 => 'javelin-install', 850 + 'javelin-behavior', 851 + 'javelin-stratcom', 852 + 'javelin-dom', 853 + 'javelin-vector', 854 + 'javelin-install', 855 855 ), 856 856 '065227cc' => array( 857 - 0 => 'javelin-behavior', 858 - 1 => 'javelin-dom', 859 - 2 => 'javelin-stratcom', 860 - 3 => 'javelin-workflow', 857 + 'javelin-behavior', 858 + 'javelin-dom', 859 + 'javelin-stratcom', 860 + 'javelin-workflow', 861 861 ), 862 862 '06e05112' => array( 863 - 0 => 'javelin-behavior', 864 - 1 => 'javelin-stratcom', 865 - 2 => 'javelin-dom', 866 - 3 => 'javelin-vector', 863 + 'javelin-behavior', 864 + 'javelin-stratcom', 865 + 'javelin-dom', 866 + 'javelin-vector', 867 867 ), 868 868 '0720f2cf' => array( 869 - 0 => 'javelin-behavior', 870 - 1 => 'javelin-stratcom', 871 - 2 => 'javelin-dom', 872 - 3 => 'javelin-mask', 873 - 4 => 'javelin-util', 874 - 5 => 'phabricator-busy', 869 + 'javelin-behavior', 870 + 'javelin-stratcom', 871 + 'javelin-dom', 872 + 'javelin-mask', 873 + 'javelin-util', 874 + 'phabricator-busy', 875 875 ), 876 876 '09eee344' => array( 877 - 0 => 'javelin-behavior', 878 - 1 => 'javelin-stratcom', 879 - 2 => 'javelin-workflow', 880 - 3 => 'javelin-dom', 881 - 4 => 'phabricator-draggable-list', 877 + 'javelin-behavior', 878 + 'javelin-stratcom', 879 + 'javelin-workflow', 880 + 'javelin-dom', 881 + 'phabricator-draggable-list', 882 882 ), 883 883 '0a3f3021' => array( 884 - 0 => 'javelin-behavior', 885 - 1 => 'javelin-stratcom', 886 - 2 => 'javelin-workflow', 887 - 3 => 'javelin-dom', 888 - 4 => 'javelin-router', 884 + 'javelin-behavior', 885 + 'javelin-stratcom', 886 + 'javelin-workflow', 887 + 'javelin-dom', 888 + 'javelin-router', 889 889 ), 890 890 '0c33c1a0' => array( 891 - 0 => 'javelin-view', 892 - 1 => 'javelin-install', 893 - 2 => 'javelin-dom', 891 + 'javelin-view', 892 + 'javelin-install', 893 + 'javelin-dom', 894 894 ), 895 895 '0c6946e7' => array( 896 - 0 => 'javelin-install', 897 - 1 => 'javelin-dom', 898 - 2 => 'javelin-stratcom', 899 - 3 => 'javelin-util', 900 - 4 => 'phabricator-notification-css', 896 + 'javelin-install', 897 + 'javelin-dom', 898 + 'javelin-stratcom', 899 + 'javelin-util', 900 + 'phabricator-notification-css', 901 901 ), 902 902 '0ec56e1d' => array( 903 - 0 => 'javelin-behavior', 904 - 1 => 'javelin-dom', 905 - 2 => 'javelin-stratcom', 906 - 3 => 'phuix-dropdown-menu', 903 + 'javelin-behavior', 904 + 'javelin-dom', 905 + 'javelin-stratcom', 906 + 'phuix-dropdown-menu', 907 907 ), 908 908 '0f764c35' => array( 909 - 0 => 'javelin-install', 910 - 1 => 'javelin-util', 909 + 'javelin-install', 910 + 'javelin-util', 911 911 ), 912 912 '0f81f8df' => array( 913 - 0 => 'javelin-util', 914 - 1 => 'javelin-uri', 915 - 2 => 'javelin-install', 913 + 'javelin-util', 914 + 'javelin-uri', 915 + 'javelin-install', 916 916 ), 917 917 '127f2018' => array( 918 - 0 => 'javelin-behavior', 919 - 1 => 'javelin-stratcom', 920 - 2 => 'javelin-dom', 921 - 3 => 'javelin-request', 922 - 4 => 'javelin-util', 923 - 5 => 'phabricator-shaped-request', 918 + 'javelin-behavior', 919 + 'javelin-stratcom', 920 + 'javelin-dom', 921 + 'javelin-request', 922 + 'javelin-util', 923 + 'phabricator-shaped-request', 924 924 ), 925 925 '14a827de' => array( 926 - 0 => 'javelin-behavior', 927 - 1 => 'javelin-stratcom', 928 - 2 => 'javelin-dom', 929 - 3 => 'javelin-json', 930 - 4 => 'phabricator-draggable-list', 926 + 'javelin-behavior', 927 + 'javelin-stratcom', 928 + 'javelin-dom', 929 + 'javelin-json', 930 + 'phabricator-draggable-list', 931 931 ), 932 932 '14d7a8b8' => array( 933 - 0 => 'javelin-behavior', 934 - 1 => 'javelin-behavior-device', 935 - 2 => 'javelin-stratcom', 936 - 3 => 'javelin-dom', 937 - 4 => 'javelin-magical-init', 938 - 5 => 'javelin-vector', 939 - 6 => 'javelin-request', 940 - 7 => 'javelin-util', 933 + 'javelin-behavior', 934 + 'javelin-behavior-device', 935 + 'javelin-stratcom', 936 + 'javelin-dom', 937 + 'javelin-magical-init', 938 + 'javelin-vector', 939 + 'javelin-request', 940 + 'javelin-util', 941 941 ), 942 942 '152178f0' => array( 943 - 0 => 'javelin-behavior', 944 - 1 => 'javelin-util', 945 - 2 => 'javelin-stratcom', 946 - 3 => 'javelin-dom', 947 - 4 => 'javelin-vector', 948 - 5 => 'javelin-magical-init', 949 - 6 => 'javelin-request', 950 - 7 => 'javelin-history', 951 - 8 => 'javelin-workflow', 952 - 9 => 'javelin-mask', 953 - 10 => 'javelin-behavior-device', 954 - 11 => 'phabricator-keyboard-shortcut', 943 + 'javelin-behavior', 944 + 'javelin-util', 945 + 'javelin-stratcom', 946 + 'javelin-dom', 947 + 'javelin-vector', 948 + 'javelin-magical-init', 949 + 'javelin-request', 950 + 'javelin-history', 951 + 'javelin-workflow', 952 + 'javelin-mask', 953 + 'javelin-behavior-device', 954 + 'phabricator-keyboard-shortcut', 955 955 ), 956 956 '1693a296' => array( 957 - 0 => 'javelin-behavior', 958 - 1 => 'javelin-dom', 959 - 2 => 'phortune-credit-card-form', 957 + 'javelin-behavior', 958 + 'javelin-dom', 959 + 'phortune-credit-card-form', 960 960 ), 961 961 '1ae869f2' => array( 962 - 0 => 'javelin-install', 963 - 1 => 'javelin-util', 964 - 2 => 'phabricator-keyboard-shortcut-manager', 962 + 'javelin-install', 963 + 'javelin-util', 964 + 'phabricator-keyboard-shortcut-manager', 965 965 ), 966 966 '1d8ad5c3' => array( 967 - 0 => 'javelin-install', 968 - 1 => 'javelin-util', 969 - 2 => 'javelin-request', 970 - 3 => 'javelin-dom', 971 - 4 => 'javelin-uri', 972 - 5 => 'phabricator-file-upload', 967 + 'javelin-install', 968 + 'javelin-util', 969 + 'javelin-request', 970 + 'javelin-dom', 971 + 'javelin-uri', 972 + 'phabricator-file-upload', 973 973 ), 974 974 '1def2711' => array( 975 - 0 => 'javelin-install', 976 - 1 => 'javelin-dom', 977 - 2 => 'javelin-reactor-dom', 975 + 'javelin-install', 976 + 'javelin-dom', 977 + 'javelin-reactor-dom', 978 978 ), 979 979 '1ffb3a9c' => array( 980 - 0 => 'javelin-util', 981 - 1 => 'javelin-magical-init', 980 + 'javelin-util', 981 + 'javelin-magical-init', 982 982 ), 983 983 '2290aeef' => array( 984 - 0 => 'javelin-install', 985 - 1 => 'javelin-dom', 986 - 2 => 'javelin-json', 987 - 3 => 'javelin-workflow', 988 - 4 => 'javelin-util', 984 + 'javelin-install', 985 + 'javelin-dom', 986 + 'javelin-json', 987 + 'javelin-workflow', 988 + 'javelin-util', 989 989 ), 990 990 '22e16ae7' => array( 991 - 0 => 'javelin-behavior', 992 - 1 => 'javelin-dom', 993 - 2 => 'javelin-vector', 991 + 'javelin-behavior', 992 + 'javelin-dom', 993 + 'javelin-vector', 994 994 ), 995 995 '23cbb8ac' => array( 996 - 0 => 'javelin-install', 997 - 1 => 'javelin-event', 996 + 'javelin-install', 997 + 'javelin-event', 998 998 ), 999 999 '2926fff2' => array( 1000 - 0 => 'javelin-behavior', 1001 - 1 => 'javelin-dom', 1000 + 'javelin-behavior', 1001 + 'javelin-dom', 1002 1002 ), 1003 1003 '29274e2b' => array( 1004 - 0 => 'javelin-install', 1005 - 1 => 'javelin-util', 1004 + 'javelin-install', 1005 + 'javelin-util', 1006 1006 ), 1007 1007 '2b228192' => array( 1008 - 0 => 'javelin-behavior', 1009 - 1 => 'javelin-dom', 1010 - 2 => 'javelin-util', 1011 - 3 => 'javelin-workflow', 1012 - 4 => 'javelin-json', 1008 + 'javelin-behavior', 1009 + 'javelin-dom', 1010 + 'javelin-util', 1011 + 'javelin-workflow', 1012 + 'javelin-json', 1013 1013 ), 1014 1014 '2cad29d1' => array( 1015 - 0 => 'javelin-install', 1016 - 1 => 'javelin-dom', 1017 - 2 => 'javelin-stratcom', 1018 - 3 => 'javelin-util', 1019 - 4 => 'javelin-vector', 1020 - 5 => 'javelin-magical-init', 1015 + 'javelin-install', 1016 + 'javelin-dom', 1017 + 'javelin-stratcom', 1018 + 'javelin-util', 1019 + 'javelin-vector', 1020 + 'javelin-magical-init', 1021 1021 ), 1022 1022 '2fa810fc' => array( 1023 - 0 => 'javelin-behavior', 1024 - 1 => 'javelin-dom', 1025 - 2 => 'javelin-view-renderer', 1026 - 3 => 'javelin-install', 1023 + 'javelin-behavior', 1024 + 'javelin-dom', 1025 + 'javelin-view-renderer', 1026 + 'javelin-install', 1027 1027 ), 1028 1028 '316b8fa1' => array( 1029 - 0 => 'javelin-install', 1030 - 1 => 'javelin-typeahead-source', 1029 + 'javelin-install', 1030 + 'javelin-typeahead-source', 1031 1031 ), 1032 1032 '357b6e9b' => array( 1033 - 0 => 'javelin-behavior', 1034 - 1 => 'javelin-stratcom', 1035 - 2 => 'javelin-util', 1036 - 3 => 'javelin-dom', 1037 - 4 => 'javelin-request', 1038 - 5 => 'phabricator-keyboard-shortcut', 1033 + 'javelin-behavior', 1034 + 'javelin-stratcom', 1035 + 'javelin-util', 1036 + 'javelin-dom', 1037 + 'javelin-request', 1038 + 'phabricator-keyboard-shortcut', 1039 1039 ), 1040 1040 '361e3ed3' => array( 1041 - 0 => 'javelin-behavior', 1042 - 1 => 'javelin-dom', 1041 + 'javelin-behavior', 1042 + 'javelin-dom', 1043 1043 ), 1044 1044 '3672899b' => array( 1045 - 0 => 'javelin-behavior', 1046 - 1 => 'javelin-dom', 1047 - 2 => 'javelin-uri', 1048 - 3 => 'javelin-mask', 1049 - 4 => 'phabricator-drag-and-drop-file-upload', 1045 + 'javelin-behavior', 1046 + 'javelin-dom', 1047 + 'javelin-uri', 1048 + 'javelin-mask', 1049 + 'phabricator-drag-and-drop-file-upload', 1050 1050 ), 1051 1051 '3915d490' => array( 1052 - 0 => 'javelin-install', 1053 - 1 => 'javelin-util', 1054 - 2 => 'javelin-dom', 1055 - 3 => 'javelin-vector', 1052 + 'javelin-install', 1053 + 'javelin-util', 1054 + 'javelin-dom', 1055 + 'javelin-vector', 1056 1056 ), 1057 1057 '39841ead' => array( 1058 - 0 => 'javelin-behavior', 1059 - 1 => 'javelin-dom', 1060 - 2 => 'javelin-request', 1061 - 3 => 'javelin-util', 1058 + 'javelin-behavior', 1059 + 'javelin-dom', 1060 + 'javelin-request', 1061 + 'javelin-util', 1062 1062 ), 1063 1063 '3ab51e2c' => array( 1064 - 0 => 'javelin-behavior', 1065 - 1 => 'javelin-behavior-device', 1066 - 2 => 'javelin-stratcom', 1067 - 3 => 'javelin-vector', 1068 - 4 => 'javelin-dom', 1069 - 5 => 'javelin-magical-init', 1064 + 'javelin-behavior', 1065 + 'javelin-behavior-device', 1066 + 'javelin-stratcom', 1067 + 'javelin-vector', 1068 + 'javelin-dom', 1069 + 'javelin-magical-init', 1070 1070 ), 1071 1071 '3b1557b3' => array( 1072 - 0 => 'javelin-behavior', 1073 - 1 => 'javelin-stratcom', 1074 - 2 => 'javelin-dom', 1072 + 'javelin-behavior', 1073 + 'javelin-stratcom', 1074 + 'javelin-dom', 1075 1075 ), 1076 1076 '3b3e1664' => array( 1077 - 0 => 'javelin-behavior', 1078 - 1 => 'javelin-dom', 1079 - 2 => 'phortune-credit-card-form', 1077 + 'javelin-behavior', 1078 + 'javelin-dom', 1079 + 'phortune-credit-card-form', 1080 1080 ), 1081 1081 '3d51a746' => array( 1082 - 0 => 'javelin-behavior', 1083 - 1 => 'javelin-dom', 1084 - 2 => 'javelin-stratcom', 1085 - 3 => 'javelin-workflow', 1086 - 4 => 'javelin-util', 1087 - 5 => 'javelin-uri', 1082 + 'javelin-behavior', 1083 + 'javelin-dom', 1084 + 'javelin-stratcom', 1085 + 'javelin-workflow', 1086 + 'javelin-util', 1087 + 'javelin-uri', 1088 1088 ), 1089 1089 '3ee3408b' => array( 1090 - 0 => 'javelin-behavior', 1091 - 1 => 'javelin-behavior-device', 1092 - 2 => 'javelin-stratcom', 1093 - 3 => 'phabricator-tooltip', 1090 + 'javelin-behavior', 1091 + 'javelin-behavior-device', 1092 + 'javelin-stratcom', 1093 + 'phabricator-tooltip', 1094 1094 ), 1095 1095 '3fc2c8f2' => array( 1096 - 0 => 'multirow-row-manager', 1097 - 1 => 'javelin-install', 1098 - 2 => 'javelin-util', 1099 - 3 => 'javelin-dom', 1100 - 4 => 'javelin-stratcom', 1101 - 5 => 'javelin-json', 1102 - 6 => 'phabricator-prefab', 1096 + 'multirow-row-manager', 1097 + 'javelin-install', 1098 + 'javelin-util', 1099 + 'javelin-dom', 1100 + 'javelin-stratcom', 1101 + 'javelin-json', 1102 + 'phabricator-prefab', 1103 1103 ), 1104 1104 '40a6a403' => array( 1105 - 0 => 'javelin-install', 1106 - 1 => 'javelin-dom', 1107 - 2 => 'javelin-reactor-dom', 1105 + 'javelin-install', 1106 + 'javelin-dom', 1107 + 'javelin-reactor-dom', 1108 1108 ), 1109 1109 '40b1ff90' => array( 1110 - 0 => 'javelin-behavior', 1111 - 1 => 'javelin-dom', 1112 - 2 => 'javelin-stratcom', 1113 - 3 => 'javelin-workflow', 1114 - 4 => 'javelin-util', 1115 - 5 => 'phabricator-notification', 1116 - 6 => 'javelin-behavior-device', 1117 - 7 => 'phuix-dropdown-menu', 1118 - 8 => 'phuix-action-list-view', 1119 - 9 => 'phuix-action-view', 1110 + 'javelin-behavior', 1111 + 'javelin-dom', 1112 + 'javelin-stratcom', 1113 + 'javelin-workflow', 1114 + 'javelin-util', 1115 + 'phabricator-notification', 1116 + 'javelin-behavior-device', 1117 + 'phuix-dropdown-menu', 1118 + 'phuix-action-list-view', 1119 + 'phuix-action-view', 1120 1120 ), 1121 1121 '41e47dea' => array( 1122 - 0 => 'javelin-install', 1123 - 1 => 'javelin-stratcom', 1124 - 2 => 'javelin-dom', 1125 - 3 => 'javelin-util', 1122 + 'javelin-install', 1123 + 'javelin-stratcom', 1124 + 'javelin-dom', 1125 + 'javelin-util', 1126 1126 ), 1127 1127 '44168bad' => array( 1128 - 0 => 'javelin-behavior', 1129 - 1 => 'javelin-dom', 1130 - 2 => 'phabricator-prefab', 1128 + 'javelin-behavior', 1129 + 'javelin-dom', 1130 + 'phabricator-prefab', 1131 1131 ), 1132 1132 '453c5375' => array( 1133 - 0 => 'javelin-behavior', 1134 - 1 => 'javelin-dom', 1133 + 'javelin-behavior', 1134 + 'javelin-dom', 1135 1135 ), 1136 1136 '469c0d9e' => array( 1137 - 0 => 'javelin-behavior', 1138 - 1 => 'javelin-dom', 1139 - 2 => 'javelin-workflow', 1137 + 'javelin-behavior', 1138 + 'javelin-dom', 1139 + 'javelin-workflow', 1140 1140 ), 1141 1141 '47c794d8' => array( 1142 - 0 => 'javelin-install', 1143 - 1 => 'javelin-dom', 1144 - 2 => 'javelin-reactor-dom', 1142 + 'javelin-install', 1143 + 'javelin-dom', 1144 + 'javelin-reactor-dom', 1145 1145 ), 1146 1146 '4a07e8e3' => array( 1147 - 0 => 'javelin-install', 1148 - 1 => 'javelin-util', 1147 + 'javelin-install', 1148 + 'javelin-util', 1149 1149 ), 1150 1150 '4d94d9c3' => array( 1151 - 0 => 'javelin-behavior', 1152 - 1 => 'javelin-stratcom', 1153 - 2 => 'javelin-dom', 1154 - 3 => 'phuix-dropdown-menu', 1151 + 'javelin-behavior', 1152 + 'javelin-stratcom', 1153 + 'javelin-dom', 1154 + 'phuix-dropdown-menu', 1155 1155 ), 1156 1156 '4e3e79a6' => array( 1157 - 0 => 'javelin-behavior', 1158 - 1 => 'javelin-stratcom', 1159 - 2 => 'javelin-dom', 1157 + 'javelin-behavior', 1158 + 'javelin-stratcom', 1159 + 'javelin-dom', 1160 1160 ), 1161 1161 '4e9b766b' => array( 1162 - 0 => 'javelin-behavior', 1163 - 1 => 'javelin-dom', 1164 - 2 => 'javelin-util', 1165 - 3 => 'javelin-stratcom', 1166 - 4 => 'javelin-request', 1162 + 'javelin-behavior', 1163 + 'javelin-dom', 1164 + 'javelin-util', 1165 + 'javelin-stratcom', 1166 + 'javelin-request', 1167 1167 ), 1168 1168 '4fdb476d' => array( 1169 - 0 => 'javelin-behavior', 1170 - 1 => 'javelin-stratcom', 1171 - 2 => 'javelin-dom', 1169 + 'javelin-behavior', 1170 + 'javelin-stratcom', 1171 + 'javelin-dom', 1172 1172 ), 1173 1173 '503e17fd' => array( 1174 - 0 => 'javelin-install', 1175 - 1 => 'javelin-typeahead-source', 1176 - 2 => 'javelin-util', 1174 + 'javelin-install', 1175 + 'javelin-typeahead-source', 1176 + 'javelin-util', 1177 1177 ), 1178 1178 '519705ea' => array( 1179 - 0 => 'javelin-install', 1180 - 1 => 'javelin-dom', 1181 - 2 => 'javelin-reactor-dom', 1179 + 'javelin-install', 1180 + 'javelin-dom', 1181 + 'javelin-reactor-dom', 1182 1182 ), 1183 1183 '54b612ba' => array( 1184 - 0 => 'javelin-color', 1185 - 1 => 'javelin-install', 1186 - 2 => 'javelin-util', 1184 + 'javelin-color', 1185 + 'javelin-install', 1186 + 'javelin-util', 1187 1187 ), 1188 1188 '54f314a0' => array( 1189 - 0 => 'javelin-install', 1190 - 1 => 'javelin-util', 1191 - 2 => 'javelin-request', 1192 - 3 => 'javelin-typeahead-source', 1189 + 'javelin-install', 1190 + 'javelin-util', 1191 + 'javelin-request', 1192 + 'javelin-typeahead-source', 1193 1193 ), 1194 1194 '558829c2' => array( 1195 - 0 => 'javelin-stratcom', 1196 - 1 => 'javelin-behavior', 1197 - 2 => 'javelin-vector', 1198 - 3 => 'javelin-dom', 1195 + 'javelin-stratcom', 1196 + 'javelin-behavior', 1197 + 'javelin-vector', 1198 + 'javelin-dom', 1199 1199 ), 1200 1200 '58f7803f' => array( 1201 - 0 => 'javelin-behavior', 1202 - 1 => 'javelin-aphlict', 1203 - 2 => 'phabricator-phtize', 1204 - 3 => 'javelin-dom', 1201 + 'javelin-behavior', 1202 + 'javelin-aphlict', 1203 + 'phabricator-phtize', 1204 + 'javelin-dom', 1205 1205 ), 1206 1206 '59b251eb' => array( 1207 - 0 => 'javelin-behavior', 1208 - 1 => 'javelin-stratcom', 1209 - 2 => 'javelin-vector', 1210 - 3 => 'javelin-dom', 1207 + 'javelin-behavior', 1208 + 'javelin-stratcom', 1209 + 'javelin-vector', 1210 + 'javelin-dom', 1211 1211 ), 1212 1212 '5bc2cb21' => array( 1213 - 0 => 'javelin-behavior', 1214 - 1 => 'javelin-stratcom', 1213 + 'javelin-behavior', 1214 + 'javelin-stratcom', 1215 1215 ), 1216 1216 '5fefb143' => array( 1217 - 0 => 'javelin-behavior', 1218 - 1 => 'javelin-dom', 1219 - 2 => 'javelin-workflow', 1220 - 3 => 'javelin-stratcom', 1217 + 'javelin-behavior', 1218 + 'javelin-dom', 1219 + 'javelin-workflow', 1220 + 'javelin-stratcom', 1221 1221 ), 1222 1222 '60821bc7' => array( 1223 - 0 => 'javelin-behavior', 1224 - 1 => 'javelin-stratcom', 1225 - 2 => 'javelin-dom', 1223 + 'javelin-behavior', 1224 + 'javelin-stratcom', 1225 + 'javelin-dom', 1226 1226 ), 1227 1227 '6153c708' => array( 1228 - 0 => 'javelin-behavior', 1229 - 1 => 'javelin-stratcom', 1230 - 2 => 'javelin-dom', 1231 - 3 => 'javelin-workflow', 1228 + 'javelin-behavior', 1229 + 'javelin-stratcom', 1230 + 'javelin-dom', 1231 + 'javelin-workflow', 1232 1232 ), 1233 1233 '61cbc29a' => array( 1234 - 0 => 'javelin-magical-init', 1235 - 1 => 'javelin-util', 1234 + 'javelin-magical-init', 1235 + 'javelin-util', 1236 1236 ), 1237 1237 '6453c869' => array( 1238 - 0 => 'javelin-install', 1239 - 1 => 'javelin-dom', 1240 - 2 => 'javelin-fx', 1238 + 'javelin-install', 1239 + 'javelin-dom', 1240 + 'javelin-fx', 1241 1241 ), 1242 1242 '69adf288' => array( 1243 - 0 => 'javelin-install', 1243 + 'javelin-install', 1244 1244 ), 1245 1245 '6b3dcf44' => array( 1246 - 0 => 'javelin-install', 1247 - 1 => 'javelin-util', 1246 + 'javelin-install', 1247 + 'javelin-util', 1248 1248 ), 1249 1249 '6c2b09a2' => array( 1250 - 0 => 'javelin-install', 1251 - 1 => 'javelin-util', 1250 + 'javelin-install', 1251 + 'javelin-util', 1252 1252 ), 1253 1253 '6d3e1947' => array( 1254 - 0 => 'javelin-behavior', 1255 - 1 => 'javelin-diffusion-locate-file-source', 1256 - 2 => 'javelin-dom', 1257 - 3 => 'javelin-typeahead', 1258 - 4 => 'javelin-uri', 1254 + 'javelin-behavior', 1255 + 'javelin-diffusion-locate-file-source', 1256 + 'javelin-dom', 1257 + 'javelin-typeahead', 1258 + 'javelin-uri', 1259 1259 ), 1260 1260 '6e8cefa4' => array( 1261 - 0 => 'javelin-install', 1262 - 1 => 'javelin-dom', 1263 - 2 => 'javelin-util', 1261 + 'javelin-install', 1262 + 'javelin-dom', 1263 + 'javelin-util', 1264 1264 ), 1265 1265 '6eff08aa' => array( 1266 - 0 => 'javelin-install', 1267 - 1 => 'javelin-util', 1268 - 2 => 'javelin-stratcom', 1266 + 'javelin-install', 1267 + 'javelin-util', 1268 + 'javelin-stratcom', 1269 1269 ), 1270 1270 '710f209e' => array( 1271 - 0 => 'javelin-behavior', 1272 - 1 => 'javelin-dom', 1273 - 2 => 'javelin-util', 1274 - 3 => 'javelin-stratcom', 1275 - 4 => 'javelin-workflow', 1276 - 5 => 'phuix-dropdown-menu', 1277 - 6 => 'phuix-action-list-view', 1278 - 7 => 'phuix-action-view', 1279 - 8 => 'phabricator-phtize', 1280 - 9 => 'changeset-view-manager', 1271 + 'javelin-behavior', 1272 + 'javelin-dom', 1273 + 'javelin-util', 1274 + 'javelin-stratcom', 1275 + 'javelin-workflow', 1276 + 'phuix-dropdown-menu', 1277 + 'phuix-action-list-view', 1278 + 'phuix-action-view', 1279 + 'phabricator-phtize', 1280 + 'changeset-view-manager', 1281 1281 ), 1282 1282 '71f66c08' => array( 1283 - 0 => 'javelin-behavior', 1284 - 1 => 'javelin-stratcom', 1285 - 2 => 'javelin-workflow', 1286 - 3 => 'javelin-dom', 1287 - 4 => 'javelin-uri', 1288 - 5 => 'phabricator-textareautils', 1283 + 'javelin-behavior', 1284 + 'javelin-stratcom', 1285 + 'javelin-workflow', 1286 + 'javelin-dom', 1287 + 'javelin-uri', 1288 + 'phabricator-textareautils', 1289 1289 ), 1290 1290 '7319e029' => array( 1291 - 0 => 'javelin-behavior', 1292 - 1 => 'javelin-dom', 1291 + 'javelin-behavior', 1292 + 'javelin-dom', 1293 1293 ), 1294 1294 '76b9fc3e' => array( 1295 - 0 => 'javelin-behavior', 1296 - 1 => 'javelin-stratcom', 1297 - 2 => 'javelin-workflow', 1298 - 3 => 'javelin-dom', 1299 - 4 => 'phabricator-draggable-list', 1295 + 'javelin-behavior', 1296 + 'javelin-stratcom', 1297 + 'javelin-workflow', 1298 + 'javelin-dom', 1299 + 'phabricator-draggable-list', 1300 1300 ), 1301 1301 '76f4ebed' => array( 1302 - 0 => 'javelin-install', 1303 - 1 => 'javelin-reactor', 1304 - 2 => 'javelin-util', 1302 + 'javelin-install', 1303 + 'javelin-reactor', 1304 + 'javelin-util', 1305 1305 ), 1306 1306 '77b1cf6f' => array( 1307 - 0 => 'javelin-install', 1308 - 1 => 'javelin-util', 1307 + 'javelin-install', 1308 + 'javelin-util', 1309 1309 ), 1310 1310 '7814b593' => array( 1311 - 0 => 'javelin-request', 1312 - 1 => 'javelin-behavior', 1313 - 2 => 'javelin-dom', 1314 - 3 => 'javelin-router', 1315 - 4 => 'javelin-util', 1316 - 5 => 'phabricator-busy', 1311 + 'javelin-request', 1312 + 'javelin-behavior', 1313 + 'javelin-dom', 1314 + 'javelin-router', 1315 + 'javelin-util', 1316 + 'phabricator-busy', 1317 1317 ), 1318 1318 '7a68dda3' => array( 1319 - 0 => 'owners-path-editor', 1320 - 1 => 'javelin-behavior', 1319 + 'owners-path-editor', 1320 + 'javelin-behavior', 1321 1321 ), 1322 1322 '7a9677fc' => array( 1323 - 0 => 'phabricator-notification', 1324 - 1 => 'javelin-stratcom', 1325 - 2 => 'javelin-behavior', 1323 + 'phabricator-notification', 1324 + 'javelin-stratcom', 1325 + 'javelin-behavior', 1326 1326 ), 1327 1327 '7b98d7c5' => array( 1328 - 0 => 'javelin-behavior', 1329 - 1 => 'javelin-dom', 1330 - 2 => 'javelin-stratcom', 1331 - 3 => 'javelin-util', 1328 + 'javelin-behavior', 1329 + 'javelin-dom', 1330 + 'javelin-stratcom', 1331 + 'javelin-util', 1332 1332 ), 1333 1333 '7c273581' => array( 1334 - 0 => 'javelin-behavior', 1335 - 1 => 'javelin-stratcom', 1336 - 2 => 'javelin-dom', 1334 + 'javelin-behavior', 1335 + 'javelin-stratcom', 1336 + 'javelin-dom', 1337 1337 ), 1338 1338 '7cbe244b' => array( 1339 - 0 => 'javelin-install', 1340 - 1 => 'javelin-util', 1341 - 2 => 'javelin-request', 1342 - 3 => 'javelin-router', 1339 + 'javelin-install', 1340 + 'javelin-util', 1341 + 'javelin-request', 1342 + 'javelin-router', 1343 1343 ), 1344 1344 '7e41274a' => array( 1345 - 0 => 'javelin-install', 1345 + 'javelin-install', 1346 1346 ), 1347 1347 '7e8468ae' => array( 1348 - 0 => 'javelin-install', 1349 - 1 => 'javelin-dom', 1350 - 2 => 'javelin-vector', 1351 - 3 => 'javelin-request', 1352 - 4 => 'javelin-uri', 1348 + 'javelin-install', 1349 + 'javelin-dom', 1350 + 'javelin-vector', 1351 + 'javelin-request', 1352 + 'javelin-uri', 1353 1353 ), 1354 1354 '7ebaeed3' => array( 1355 - 0 => 'herald-rule-editor', 1356 - 1 => 'javelin-behavior', 1355 + 'herald-rule-editor', 1356 + 'javelin-behavior', 1357 1357 ), 1358 1358 '7ee2b591' => array( 1359 - 0 => 'javelin-behavior', 1360 - 1 => 'javelin-history', 1359 + 'javelin-behavior', 1360 + 'javelin-history', 1361 1361 ), 1362 1362 '82ce2142' => array( 1363 - 0 => 'aphront-typeahead-control-css', 1363 + 'aphront-typeahead-control-css', 1364 1364 ), 1365 1365 '84845b5b' => array( 1366 - 0 => 'javelin-behavior', 1367 - 1 => 'javelin-dom', 1368 - 2 => 'javelin-stratcom', 1369 - 3 => 'javelin-workflow', 1370 - 4 => 'phabricator-draggable-list', 1366 + 'javelin-behavior', 1367 + 'javelin-dom', 1368 + 'javelin-stratcom', 1369 + 'javelin-workflow', 1370 + 'phabricator-draggable-list', 1371 1371 ), 1372 1372 '85ab3c8e' => array( 1373 - 0 => 'javelin-behavior', 1374 - 1 => 'javelin-dom', 1375 - 2 => 'javelin-util', 1376 - 3 => 'javelin-workflow', 1377 - 4 => 'javelin-stratcom', 1373 + 'javelin-behavior', 1374 + 'javelin-dom', 1375 + 'javelin-util', 1376 + 'javelin-workflow', 1377 + 'javelin-stratcom', 1378 1378 ), 1379 1379 '85ea0626' => array( 1380 - 0 => 'javelin-install', 1380 + 'javelin-install', 1381 1381 ), 1382 1382 '88236f00' => array( 1383 - 0 => 'javelin-behavior', 1384 - 1 => 'phabricator-keyboard-shortcut', 1385 - 2 => 'javelin-stratcom', 1383 + 'javelin-behavior', 1384 + 'phabricator-keyboard-shortcut', 1385 + 'javelin-stratcom', 1386 1386 ), 1387 1387 '886fd850' => array( 1388 - 0 => 'javelin-install', 1389 - 1 => 'javelin-reactor-dom', 1390 - 2 => 'javelin-view-html', 1391 - 3 => 'javelin-view-interpreter', 1392 - 4 => 'javelin-view-renderer', 1388 + 'javelin-install', 1389 + 'javelin-reactor-dom', 1390 + 'javelin-view-html', 1391 + 'javelin-view-interpreter', 1392 + 'javelin-view-renderer', 1393 1393 ), 1394 1394 '8a41885b' => array( 1395 - 0 => 'javelin-install', 1396 - 1 => 'javelin-dom', 1395 + 'javelin-install', 1396 + 'javelin-dom', 1397 1397 ), 1398 1398 '8b0ad945' => array( 1399 - 0 => 'javelin-install', 1400 - 1 => 'javelin-event', 1401 - 2 => 'javelin-util', 1402 - 3 => 'javelin-magical-init', 1399 + 'javelin-install', 1400 + 'javelin-event', 1401 + 'javelin-util', 1402 + 'javelin-magical-init', 1403 1403 ), 1404 1404 '8b3fd187' => array( 1405 - 0 => 'javelin-install', 1406 - 1 => 'javelin-util', 1407 - 2 => 'javelin-request', 1408 - 3 => 'javelin-typeahead-source', 1405 + 'javelin-install', 1406 + 'javelin-util', 1407 + 'javelin-request', 1408 + 'javelin-typeahead-source', 1409 1409 ), 1410 1410 '8d199d97' => array( 1411 - 0 => 'javelin-behavior', 1412 - 1 => 'javelin-dom', 1413 - 2 => 'javelin-stratcom', 1414 - 3 => 'phabricator-keyboard-shortcut', 1411 + 'javelin-behavior', 1412 + 'javelin-dom', 1413 + 'javelin-stratcom', 1414 + 'phabricator-keyboard-shortcut', 1415 1415 ), 1416 1416 '8ef9ab58' => array( 1417 - 0 => 'javelin-behavior', 1418 - 1 => 'javelin-dom', 1419 - 2 => 'javelin-stratcom', 1417 + 'javelin-behavior', 1418 + 'javelin-dom', 1419 + 'javelin-stratcom', 1420 1420 ), 1421 1421 '8fc1c918' => array( 1422 - 0 => 'javelin-behavior', 1423 - 1 => 'javelin-uri', 1424 - 2 => 'phabricator-notification', 1422 + 'javelin-behavior', 1423 + 'javelin-uri', 1424 + 'phabricator-notification', 1425 1425 ), 1426 1426 '92eb531d' => array( 1427 - 0 => 'javelin-behavior', 1428 - 1 => 'javelin-dom', 1429 - 2 => 'phabricator-drag-and-drop-file-upload', 1430 - 3 => 'phabricator-textareautils', 1427 + 'javelin-behavior', 1428 + 'javelin-dom', 1429 + 'phabricator-drag-and-drop-file-upload', 1430 + 'phabricator-textareautils', 1431 1431 ), 1432 1432 '9414ff18' => array( 1433 - 0 => 'javelin-behavior', 1434 - 1 => 'javelin-resource', 1435 - 2 => 'javelin-stratcom', 1436 - 3 => 'javelin-workflow', 1437 - 4 => 'javelin-util', 1433 + 'javelin-behavior', 1434 + 'javelin-resource', 1435 + 'javelin-stratcom', 1436 + 'javelin-workflow', 1437 + 'javelin-util', 1438 1438 ), 1439 1439 '97258e55' => array( 1440 - 0 => 'javelin-install', 1441 - 1 => 'javelin-stratcom', 1442 - 2 => 'javelin-util', 1443 - 3 => 'javelin-behavior', 1444 - 4 => 'javelin-json', 1445 - 5 => 'javelin-dom', 1446 - 6 => 'javelin-resource', 1447 - 7 => 'javelin-routable', 1440 + 'javelin-install', 1441 + 'javelin-stratcom', 1442 + 'javelin-util', 1443 + 'javelin-behavior', 1444 + 'javelin-json', 1445 + 'javelin-dom', 1446 + 'javelin-resource', 1447 + 'javelin-routable', 1448 1448 ), 1449 1449 '988040b4' => array( 1450 - 0 => 'javelin-install', 1451 - 1 => 'javelin-dom', 1452 - 2 => 'javelin-reactor-dom', 1450 + 'javelin-install', 1451 + 'javelin-dom', 1452 + 'javelin-reactor-dom', 1453 1453 ), 1454 1454 '9c2623f4' => array( 1455 - 0 => 'javelin-behavior', 1456 - 1 => 'javelin-stratcom', 1457 - 2 => 'javelin-dom', 1458 - 3 => 'javelin-workflow', 1459 - 4 => 'phabricator-phtize', 1460 - 5 => 'phabricator-drag-and-drop-file-upload', 1461 - 6 => 'phabricator-draggable-list', 1455 + 'javelin-behavior', 1456 + 'javelin-stratcom', 1457 + 'javelin-dom', 1458 + 'javelin-workflow', 1459 + 'phabricator-phtize', 1460 + 'phabricator-drag-and-drop-file-upload', 1461 + 'phabricator-draggable-list', 1462 1462 ), 1463 1463 '9db3d160' => array( 1464 - 0 => 'javelin-behavior', 1465 - 1 => 'javelin-vector', 1466 - 2 => 'javelin-dom', 1464 + 'javelin-behavior', 1465 + 'javelin-vector', 1466 + 'javelin-dom', 1467 1467 ), 1468 1468 '9f7309fb' => array( 1469 - 0 => 'javelin-behavior', 1470 - 1 => 'javelin-dom', 1471 - 2 => 'javelin-util', 1472 - 3 => 'javelin-request', 1473 - 4 => 'phabricator-shaped-request', 1469 + 'javelin-behavior', 1470 + 'javelin-dom', 1471 + 'javelin-util', 1472 + 'javelin-request', 1473 + 'phabricator-shaped-request', 1474 1474 ), 1475 1475 'a155550f' => array( 1476 - 0 => 'javelin-install', 1477 - 1 => 'javelin-dom', 1478 - 2 => 'javelin-reactor-dom', 1476 + 'javelin-install', 1477 + 'javelin-dom', 1478 + 'javelin-reactor-dom', 1479 1479 ), 1480 1480 'a3e2244e' => array( 1481 - 0 => 'javelin-behavior', 1482 - 1 => 'javelin-stratcom', 1483 - 2 => 'javelin-dom', 1481 + 'javelin-behavior', 1482 + 'javelin-stratcom', 1483 + 'javelin-dom', 1484 1484 ), 1485 1485 'a4ae61bf' => array( 1486 - 0 => 'javelin-install', 1487 - 1 => 'javelin-dom', 1488 - 2 => 'phabricator-notification', 1486 + 'javelin-install', 1487 + 'javelin-dom', 1488 + 'phabricator-notification', 1489 1489 ), 1490 1490 'a5573bcd' => array( 1491 - 0 => 'javelin-behavior', 1492 - 1 => 'javelin-util', 1493 - 2 => 'javelin-dom', 1494 - 3 => 'javelin-stratcom', 1495 - 4 => 'javelin-vector', 1491 + 'javelin-behavior', 1492 + 'javelin-util', 1493 + 'javelin-dom', 1494 + 'javelin-stratcom', 1495 + 'javelin-vector', 1496 1496 ), 1497 1497 'a5b67173' => array( 1498 - 0 => 'javelin-dom', 1499 - 1 => 'javelin-util', 1500 - 2 => 'javelin-stratcom', 1501 - 3 => 'javelin-install', 1498 + 'javelin-dom', 1499 + 'javelin-util', 1500 + 'javelin-stratcom', 1501 + 'javelin-install', 1502 1502 ), 1503 1503 'a5d7cf86' => array( 1504 - 0 => 'javelin-dom', 1504 + 'javelin-dom', 1505 1505 ), 1506 1506 'a80d0378' => array( 1507 - 0 => 'javelin-behavior', 1508 - 1 => 'javelin-stratcom', 1509 - 2 => 'javelin-dom', 1507 + 'javelin-behavior', 1508 + 'javelin-stratcom', 1509 + 'javelin-dom', 1510 1510 ), 1511 1511 'a826c925' => array( 1512 - 0 => 'javelin-behavior', 1513 - 1 => 'javelin-aphlict', 1514 - 2 => 'javelin-stratcom', 1515 - 3 => 'javelin-request', 1516 - 4 => 'javelin-uri', 1517 - 5 => 'javelin-dom', 1518 - 6 => 'javelin-json', 1519 - 7 => 'javelin-router', 1520 - 8 => 'javelin-util', 1521 - 9 => 'phabricator-notification', 1512 + 'javelin-behavior', 1513 + 'javelin-aphlict', 1514 + 'javelin-stratcom', 1515 + 'javelin-request', 1516 + 'javelin-uri', 1517 + 'javelin-dom', 1518 + 'javelin-json', 1519 + 'javelin-router', 1520 + 'javelin-util', 1521 + 'phabricator-notification', 1522 1522 ), 1523 1523 'a8d8459d' => array( 1524 - 0 => 'javelin-behavior', 1525 - 1 => 'javelin-dom', 1526 - 2 => 'javelin-stratcom', 1524 + 'javelin-behavior', 1525 + 'javelin-dom', 1526 + 'javelin-stratcom', 1527 1527 ), 1528 1528 'a8da01f0' => array( 1529 - 0 => 'javelin-behavior', 1530 - 1 => 'javelin-uri', 1531 - 2 => 'phabricator-keyboard-shortcut', 1529 + 'javelin-behavior', 1530 + 'javelin-uri', 1531 + 'phabricator-keyboard-shortcut', 1532 1532 ), 1533 1533 'a9f88de2' => array( 1534 - 0 => 'javelin-behavior', 1535 - 1 => 'javelin-dom', 1536 - 2 => 'javelin-stratcom', 1537 - 3 => 'javelin-workflow', 1538 - 4 => 'javelin-fx', 1539 - 5 => 'javelin-util', 1534 + 'javelin-behavior', 1535 + 'javelin-dom', 1536 + 'javelin-stratcom', 1537 + 'javelin-workflow', 1538 + 'javelin-fx', 1539 + 'javelin-util', 1540 1540 ), 1541 1541 'aa1733d0' => array( 1542 - 0 => 'multirow-row-manager', 1543 - 1 => 'javelin-install', 1544 - 2 => 'path-typeahead', 1545 - 3 => 'javelin-dom', 1546 - 4 => 'javelin-util', 1547 - 5 => 'phabricator-prefab', 1542 + 'multirow-row-manager', 1543 + 'javelin-install', 1544 + 'path-typeahead', 1545 + 'javelin-dom', 1546 + 'javelin-util', 1547 + 'phabricator-prefab', 1548 1548 ), 1549 1549 'aa93c7b0' => array( 1550 - 0 => 'javelin-install', 1550 + 'javelin-install', 1551 1551 ), 1552 1552 'ab836011' => array( 1553 - 0 => 'javelin-behavior', 1554 - 1 => 'javelin-dom', 1555 - 2 => 'javelin-stratcom', 1556 - 3 => 'javelin-workflow', 1557 - 4 => 'javelin-util', 1558 - 5 => 'phabricator-keyboard-shortcut', 1553 + 'javelin-behavior', 1554 + 'javelin-dom', 1555 + 'javelin-stratcom', 1556 + 'javelin-workflow', 1557 + 'javelin-util', 1558 + 'phabricator-keyboard-shortcut', 1559 1559 ), 1560 1560 'ab8d2723' => array( 1561 - 0 => 'javelin-behavior', 1562 - 1 => 'javelin-dom', 1563 - 2 => 'phortune-credit-card-form', 1561 + 'javelin-behavior', 1562 + 'javelin-dom', 1563 + 'phortune-credit-card-form', 1564 1564 ), 1565 1565 'ad7a69ca' => array( 1566 - 0 => 'javelin-install', 1567 - 1 => 'javelin-util', 1568 - 2 => 'javelin-stratcom', 1569 - 3 => 'javelin-dom', 1570 - 4 => 'javelin-vector', 1566 + 'javelin-install', 1567 + 'javelin-util', 1568 + 'javelin-stratcom', 1569 + 'javelin-dom', 1570 + 'javelin-vector', 1571 1571 ), 1572 1572 'b1f0ccee' => array( 1573 - 0 => 'javelin-install', 1574 - 1 => 'javelin-dom', 1575 - 2 => 'javelin-reactor-dom', 1573 + 'javelin-install', 1574 + 'javelin-dom', 1575 + 'javelin-reactor-dom', 1576 1576 ), 1577 1577 'b2b4fbaf' => array( 1578 - 0 => 'javelin-behavior', 1579 - 1 => 'javelin-dom', 1580 - 2 => 'javelin-uri', 1581 - 3 => 'javelin-request', 1578 + 'javelin-behavior', 1579 + 'javelin-dom', 1580 + 'javelin-uri', 1581 + 'javelin-request', 1582 1582 ), 1583 1583 'b3a4b884' => array( 1584 - 0 => 'javelin-behavior', 1585 - 1 => 'phabricator-prefab', 1584 + 'javelin-behavior', 1585 + 'phabricator-prefab', 1586 1586 ), 1587 1587 'b3e7d692' => array( 1588 - 0 => 'javelin-install', 1588 + 'javelin-install', 1589 1589 ), 1590 1590 'b3ec3cfc' => array( 1591 - 0 => 'javelin-install', 1591 + 'javelin-install', 1592 1592 ), 1593 1593 'b42eddc7' => array( 1594 - 0 => 'javelin-install', 1595 - 1 => 'javelin-dom', 1596 - 2 => 'javelin-typeahead-preloaded-source', 1597 - 3 => 'javelin-util', 1594 + 'javelin-install', 1595 + 'javelin-dom', 1596 + 'javelin-typeahead-preloaded-source', 1597 + 'javelin-util', 1598 1598 ), 1599 1599 'b4c30592' => array( 1600 - 0 => 'javelin-install', 1601 - 1 => 'javelin-reactor', 1602 - 2 => 'javelin-util', 1603 - 3 => 'javelin-reactor-node-calmer', 1600 + 'javelin-install', 1601 + 'javelin-reactor', 1602 + 'javelin-util', 1603 + 'javelin-reactor-node-calmer', 1604 1604 ), 1605 1605 'b5c256b8' => array( 1606 - 0 => 'javelin-install', 1607 - 1 => 'javelin-dom', 1606 + 'javelin-install', 1607 + 'javelin-dom', 1608 1608 ), 1609 1609 'b6d401d6' => array( 1610 - 0 => 'javelin-dom', 1611 - 1 => 'javelin-dynval', 1612 - 2 => 'javelin-reactor', 1613 - 3 => 'javelin-reactornode', 1614 - 4 => 'javelin-install', 1615 - 5 => 'javelin-util', 1610 + 'javelin-dom', 1611 + 'javelin-dynval', 1612 + 'javelin-reactor', 1613 + 'javelin-reactornode', 1614 + 'javelin-install', 1615 + 'javelin-util', 1616 1616 ), 1617 1617 'b716477f' => array( 1618 - 0 => 'javelin-behavior', 1619 - 1 => 'javelin-stratcom', 1620 - 2 => 'javelin-workflow', 1621 - 3 => 'javelin-dom', 1622 - 4 => 'phabricator-draggable-list', 1618 + 'javelin-behavior', 1619 + 'javelin-stratcom', 1620 + 'javelin-workflow', 1621 + 'javelin-dom', 1622 + 'phabricator-draggable-list', 1623 1623 ), 1624 1624 'bba9eedf' => array( 1625 - 0 => 'javelin-behavior', 1626 - 1 => 'javelin-stratcom', 1627 - 2 => 'javelin-dom', 1625 + 'javelin-behavior', 1626 + 'javelin-stratcom', 1627 + 'javelin-dom', 1628 1628 ), 1629 1629 'bbae734c' => array( 1630 - 0 => 'javelin-install', 1631 - 1 => 'javelin-util', 1632 - 2 => 'javelin-dom', 1633 - 3 => 'javelin-typeahead', 1634 - 4 => 'javelin-tokenizer', 1635 - 5 => 'javelin-typeahead-preloaded-source', 1636 - 6 => 'javelin-typeahead-ondemand-source', 1637 - 7 => 'javelin-dom', 1638 - 8 => 'javelin-stratcom', 1639 - 9 => 'javelin-util', 1630 + 'javelin-install', 1631 + 'javelin-util', 1632 + 'javelin-dom', 1633 + 'javelin-typeahead', 1634 + 'javelin-tokenizer', 1635 + 'javelin-typeahead-preloaded-source', 1636 + 'javelin-typeahead-ondemand-source', 1637 + 'javelin-dom', 1638 + 'javelin-stratcom', 1639 + 'javelin-util', 1640 1640 ), 1641 1641 'bd4c8dca' => array( 1642 - 0 => 'javelin-install', 1643 - 1 => 'javelin-util', 1644 - 2 => 'javelin-dom', 1645 - 3 => 'javelin-vector', 1646 - 4 => 'javelin-stratcom', 1642 + 'javelin-install', 1643 + 'javelin-util', 1644 + 'javelin-dom', 1645 + 'javelin-vector', 1646 + 'javelin-stratcom', 1647 1647 ), 1648 1648 'bdaf4d04' => array( 1649 - 0 => 'javelin-behavior', 1650 - 1 => 'javelin-dom', 1651 - 2 => 'javelin-util', 1652 - 3 => 'javelin-request', 1649 + 'javelin-behavior', 1650 + 'javelin-dom', 1651 + 'javelin-util', 1652 + 'javelin-request', 1653 1653 ), 1654 1654 'bdb3e4d0' => array( 1655 - 0 => 'javelin-behavior', 1656 - 1 => 'javelin-dom', 1657 - 2 => 'javelin-stratcom', 1658 - 3 => 'phabricator-tooltip', 1659 - 4 => 'changeset-view-manager', 1655 + 'javelin-behavior', 1656 + 'javelin-dom', 1657 + 'javelin-stratcom', 1658 + 'phabricator-tooltip', 1659 + 'changeset-view-manager', 1660 1660 ), 1661 1661 'be807912' => array( 1662 - 0 => 'javelin-behavior', 1663 - 1 => 'javelin-dom', 1664 - 2 => 'javelin-util', 1665 - 3 => 'phabricator-shaped-request', 1662 + 'javelin-behavior', 1663 + 'javelin-dom', 1664 + 'javelin-util', 1665 + 'phabricator-shaped-request', 1666 1666 ), 1667 1667 'c4569c05' => array( 1668 - 0 => 'javelin-magical-init', 1669 - 1 => 'javelin-install', 1670 - 2 => 'javelin-util', 1671 - 3 => 'javelin-vector', 1672 - 4 => 'javelin-stratcom', 1668 + 'javelin-magical-init', 1669 + 'javelin-install', 1670 + 'javelin-util', 1671 + 'javelin-vector', 1672 + 'javelin-stratcom', 1673 1673 ), 1674 1674 'c60f4327' => array( 1675 - 0 => 'javelin-stratcom', 1676 - 1 => 'javelin-install', 1677 - 2 => 'javelin-uri', 1678 - 3 => 'javelin-util', 1675 + 'javelin-stratcom', 1676 + 'javelin-install', 1677 + 'javelin-uri', 1678 + 'javelin-util', 1679 1679 ), 1680 1680 'c6b95cbd' => array( 1681 - 0 => 'javelin-behavior', 1682 - 1 => 'javelin-dom', 1683 - 2 => 'javelin-util', 1684 - 3 => 'javelin-stratcom', 1685 - 4 => 'javelin-workflow', 1686 - 5 => 'phabricator-draggable-list', 1681 + 'javelin-behavior', 1682 + 'javelin-dom', 1683 + 'javelin-util', 1684 + 'javelin-stratcom', 1685 + 'javelin-workflow', 1686 + 'phabricator-draggable-list', 1687 1687 ), 1688 1688 'ca3f91eb' => array( 1689 - 0 => 'javelin-behavior', 1690 - 1 => 'javelin-dom', 1691 - 2 => 'javelin-stratcom', 1692 - 3 => 'phabricator-phtize', 1689 + 'javelin-behavior', 1690 + 'javelin-dom', 1691 + 'javelin-stratcom', 1692 + 'phabricator-phtize', 1693 1693 ), 1694 1694 'd149e002' => array( 1695 - 0 => 'javelin-stratcom', 1696 - 1 => 'javelin-request', 1697 - 2 => 'javelin-dom', 1698 - 3 => 'javelin-vector', 1699 - 4 => 'javelin-install', 1700 - 5 => 'javelin-util', 1701 - 6 => 'javelin-mask', 1702 - 7 => 'javelin-uri', 1703 - 8 => 'javelin-routable', 1695 + 'javelin-stratcom', 1696 + 'javelin-request', 1697 + 'javelin-dom', 1698 + 'javelin-vector', 1699 + 'javelin-install', 1700 + 'javelin-util', 1701 + 'javelin-mask', 1702 + 'javelin-uri', 1703 + 'javelin-routable', 1704 1704 ), 1705 1705 'd19198c8' => array( 1706 - 0 => 'javelin-install', 1707 - 1 => 'javelin-dom', 1708 - 2 => 'javelin-util', 1709 - 3 => 'javelin-dynval', 1710 - 4 => 'javelin-reactor-dom', 1706 + 'javelin-install', 1707 + 'javelin-dom', 1708 + 'javelin-util', 1709 + 'javelin-dynval', 1710 + 'javelin-reactor-dom', 1711 1711 ), 1712 1712 'd254d646' => array( 1713 - 0 => 'javelin-util', 1713 + 'javelin-util', 1714 1714 ), 1715 1715 'd2907473' => array( 1716 - 0 => 'javelin-dom', 1717 - 1 => 'javelin-util', 1718 - 2 => 'javelin-stratcom', 1719 - 3 => 'javelin-install', 1720 - 4 => 'javelin-workflow', 1721 - 5 => 'javelin-router', 1722 - 6 => 'javelin-behavior-device', 1723 - 7 => 'javelin-vector', 1716 + 'javelin-dom', 1717 + 'javelin-util', 1718 + 'javelin-stratcom', 1719 + 'javelin-install', 1720 + 'javelin-workflow', 1721 + 'javelin-router', 1722 + 'javelin-behavior-device', 1723 + 'javelin-vector', 1724 1724 ), 1725 1725 'd4a14807' => array( 1726 - 0 => 'javelin-install', 1727 - 1 => 'javelin-dom', 1728 - 2 => 'javelin-view', 1726 + 'javelin-install', 1727 + 'javelin-dom', 1728 + 'javelin-view', 1729 1729 ), 1730 1730 'd4eecc63' => array( 1731 - 0 => 'javelin-behavior', 1732 - 1 => 'javelin-dom', 1733 - 2 => 'javelin-stratcom', 1731 + 'javelin-behavior', 1732 + 'javelin-dom', 1733 + 'javelin-stratcom', 1734 1734 ), 1735 1735 'd6f54db0' => array( 1736 - 0 => 'javelin-behavior', 1737 - 1 => 'javelin-request', 1738 - 2 => 'javelin-stratcom', 1739 - 3 => 'javelin-dom', 1736 + 'javelin-behavior', 1737 + 'javelin-request', 1738 + 'javelin-stratcom', 1739 + 'javelin-dom', 1740 1740 ), 1741 1741 'd712ac5f' => array( 1742 - 0 => 'javelin-behavior', 1743 - 1 => 'javelin-typeahead-ondemand-source', 1744 - 2 => 'javelin-typeahead', 1745 - 3 => 'javelin-dom', 1746 - 4 => 'javelin-uri', 1747 - 5 => 'javelin-util', 1748 - 6 => 'javelin-stratcom', 1749 - 7 => 'phabricator-prefab', 1742 + 'javelin-behavior', 1743 + 'javelin-typeahead-ondemand-source', 1744 + 'javelin-typeahead', 1745 + 'javelin-dom', 1746 + 'javelin-uri', 1747 + 'javelin-util', 1748 + 'javelin-stratcom', 1749 + 'phabricator-prefab', 1750 1750 ), 1751 1751 'd75709e6' => array( 1752 - 0 => 'javelin-behavior', 1753 - 1 => 'javelin-workflow', 1754 - 2 => 'javelin-json', 1755 - 3 => 'javelin-dom', 1756 - 4 => 'phabricator-keyboard-shortcut', 1752 + 'javelin-behavior', 1753 + 'javelin-workflow', 1754 + 'javelin-json', 1755 + 'javelin-dom', 1756 + 'phabricator-keyboard-shortcut', 1757 1757 ), 1758 1758 'd835b03a' => array( 1759 - 0 => 'javelin-behavior', 1760 - 1 => 'javelin-dom', 1761 - 2 => 'javelin-util', 1762 - 3 => 'phabricator-shaped-request', 1759 + 'javelin-behavior', 1760 + 'javelin-dom', 1761 + 'javelin-util', 1762 + 'phabricator-shaped-request', 1763 1763 ), 1764 1764 'dd7e8ef5' => array( 1765 - 0 => 'javelin-behavior', 1766 - 1 => 'javelin-dom', 1767 - 2 => 'javelin-workflow', 1768 - 3 => 'javelin-util', 1769 - 4 => 'javelin-stratcom', 1765 + 'javelin-behavior', 1766 + 'javelin-dom', 1767 + 'javelin-workflow', 1768 + 'javelin-util', 1769 + 'javelin-stratcom', 1770 1770 ), 1771 1771 'de2e896f' => array( 1772 - 0 => 'javelin-behavior', 1773 - 1 => 'javelin-dom', 1774 - 2 => 'javelin-typeahead', 1775 - 3 => 'javelin-typeahead-ondemand-source', 1776 - 4 => 'javelin-dom', 1772 + 'javelin-behavior', 1773 + 'javelin-dom', 1774 + 'javelin-typeahead', 1775 + 'javelin-typeahead-ondemand-source', 1776 + 'javelin-dom', 1777 1777 ), 1778 1778 'e10f8e18' => array( 1779 - 0 => 'javelin-behavior', 1780 - 1 => 'javelin-dom', 1781 - 2 => 'phabricator-prefab', 1779 + 'javelin-behavior', 1780 + 'javelin-dom', 1781 + 'phabricator-prefab', 1782 1782 ), 1783 1783 'e1ff79b1' => array( 1784 - 0 => 'javelin-behavior', 1785 - 1 => 'javelin-stratcom', 1786 - 2 => 'javelin-dom', 1784 + 'javelin-behavior', 1785 + 'javelin-stratcom', 1786 + 'javelin-dom', 1787 1787 ), 1788 1788 'e32d14ab' => array( 1789 - 0 => 'javelin-behavior', 1790 - 1 => 'javelin-stratcom', 1791 - 2 => 'javelin-dom', 1792 - 3 => 'phabricator-phtize', 1793 - 4 => 'phabricator-textareautils', 1794 - 5 => 'javelin-workflow', 1795 - 6 => 'javelin-vector', 1789 + 'javelin-behavior', 1790 + 'javelin-stratcom', 1791 + 'javelin-dom', 1792 + 'phabricator-phtize', 1793 + 'phabricator-textareautils', 1794 + 'javelin-workflow', 1795 + 'javelin-vector', 1796 1796 ), 1797 1797 'e379b58e' => array( 1798 - 0 => 'javelin-behavior', 1799 - 1 => 'javelin-stratcom', 1800 - 2 => 'javelin-vector', 1801 - 3 => 'javelin-dom', 1802 - 4 => 'javelin-uri', 1798 + 'javelin-behavior', 1799 + 'javelin-stratcom', 1800 + 'javelin-vector', 1801 + 'javelin-dom', 1802 + 'javelin-uri', 1803 1803 ), 1804 1804 'e566f52c' => array( 1805 - 0 => 'javelin-behavior', 1806 - 1 => 'javelin-stratcom', 1807 - 2 => 'javelin-dom', 1805 + 'javelin-behavior', 1806 + 'javelin-stratcom', 1807 + 'javelin-dom', 1808 1808 ), 1809 1809 'e5822781' => array( 1810 - 0 => 'javelin-behavior', 1811 - 1 => 'javelin-dom', 1812 - 2 => 'javelin-json', 1813 - 3 => 'javelin-workflow', 1814 - 4 => 'javelin-magical-init', 1810 + 'javelin-behavior', 1811 + 'javelin-dom', 1812 + 'javelin-json', 1813 + 'javelin-workflow', 1814 + 'javelin-magical-init', 1815 1815 ), 1816 1816 'e5b406f9' => array( 1817 - 0 => 'javelin-install', 1818 - 1 => 'javelin-dom', 1819 - 2 => 'javelin-view-visitor', 1820 - 3 => 'javelin-util', 1817 + 'javelin-install', 1818 + 'javelin-dom', 1819 + 'javelin-view-visitor', 1820 + 'javelin-util', 1821 1821 ), 1822 1822 'e614d22b' => array( 1823 - 0 => 'javelin-install', 1824 - 1 => 'javelin-dom', 1825 - 2 => 'javelin-vector', 1826 - 3 => 'javelin-util', 1823 + 'javelin-install', 1824 + 'javelin-dom', 1825 + 'javelin-vector', 1826 + 'javelin-util', 1827 1827 ), 1828 1828 'e9581f08' => array( 1829 - 0 => 'javelin-behavior', 1830 - 1 => 'javelin-stratcom', 1831 - 2 => 'javelin-workflow', 1832 - 3 => 'javelin-dom', 1833 - 4 => 'phabricator-draggable-list', 1829 + 'javelin-behavior', 1830 + 'javelin-stratcom', 1831 + 'javelin-workflow', 1832 + 'javelin-dom', 1833 + 'phabricator-draggable-list', 1834 1834 ), 1835 1835 'efe49472' => array( 1836 - 0 => 'javelin-install', 1837 - 1 => 'javelin-util', 1836 + 'javelin-install', 1837 + 'javelin-util', 1838 1838 ), 1839 1839 'f0a41b9f' => array( 1840 - 0 => 'javelin-behavior', 1841 - 1 => 'javelin-dom', 1842 - 2 => 'javelin-util', 1843 - 3 => 'javelin-stratcom', 1844 - 4 => 'javelin-workflow', 1845 - 5 => 'javelin-behavior-device', 1846 - 6 => 'javelin-history', 1847 - 7 => 'javelin-vector', 1848 - 8 => 'phabricator-shaped-request', 1840 + 'javelin-behavior', 1841 + 'javelin-dom', 1842 + 'javelin-util', 1843 + 'javelin-stratcom', 1844 + 'javelin-workflow', 1845 + 'javelin-behavior-device', 1846 + 'javelin-history', 1847 + 'javelin-vector', 1848 + 'phabricator-shaped-request', 1849 1849 ), 1850 1850 'f2441746' => array( 1851 - 0 => 'javelin-dom', 1852 - 1 => 'javelin-util', 1853 - 2 => 'javelin-stratcom', 1854 - 3 => 'javelin-install', 1855 - 4 => 'javelin-request', 1856 - 5 => 'javelin-workflow', 1851 + 'javelin-dom', 1852 + 'javelin-util', 1853 + 'javelin-stratcom', 1854 + 'javelin-install', 1855 + 'javelin-request', 1856 + 'javelin-workflow', 1857 1857 ), 1858 1858 'f36e01af' => array( 1859 - 0 => 'javelin-behavior', 1860 - 1 => 'javelin-behavior-device', 1861 - 2 => 'javelin-stratcom', 1862 - 3 => 'javelin-vector', 1863 - 4 => 'phabricator-hovercard', 1859 + 'javelin-behavior', 1860 + 'javelin-behavior-device', 1861 + 'javelin-stratcom', 1862 + 'javelin-vector', 1863 + 'phabricator-hovercard', 1864 1864 ), 1865 1865 'f3fef818' => array( 1866 - 0 => 'javelin-behavior', 1867 - 1 => 'javelin-dom', 1868 - 2 => 'javelin-util', 1869 - 3 => 'phuix-dropdown-menu', 1870 - 4 => 'phuix-action-list-view', 1871 - 5 => 'phuix-action-view', 1872 - 6 => 'javelin-workflow', 1866 + 'javelin-behavior', 1867 + 'javelin-dom', 1868 + 'javelin-util', 1869 + 'phuix-dropdown-menu', 1870 + 'phuix-action-list-view', 1871 + 'phuix-action-view', 1872 + 'javelin-workflow', 1873 1873 ), 1874 1874 'f51afce0' => array( 1875 - 0 => 'javelin-behavior', 1876 - 1 => 'javelin-request', 1877 - 2 => 'javelin-stratcom', 1878 - 3 => 'javelin-vector', 1879 - 4 => 'javelin-dom', 1880 - 5 => 'javelin-uri', 1881 - 6 => 'javelin-behavior-device', 1875 + 'javelin-behavior', 1876 + 'javelin-request', 1877 + 'javelin-stratcom', 1878 + 'javelin-vector', 1879 + 'javelin-dom', 1880 + 'javelin-uri', 1881 + 'javelin-behavior-device', 1882 1882 ), 1883 1883 'f588412e' => array( 1884 - 0 => 'javelin-behavior', 1885 - 1 => 'javelin-dom', 1886 - 2 => 'javelin-util', 1887 - 3 => 'phabricator-prefab', 1888 - 4 => 'multirow-row-manager', 1889 - 5 => 'javelin-json', 1884 + 'javelin-behavior', 1885 + 'javelin-dom', 1886 + 'javelin-util', 1887 + 'phabricator-prefab', 1888 + 'multirow-row-manager', 1889 + 'javelin-json', 1890 1890 ), 1891 1891 'f6555212' => array( 1892 - 0 => 'javelin-install', 1893 - 1 => 'javelin-reactornode', 1894 - 2 => 'javelin-util', 1895 - 3 => 'javelin-reactor', 1892 + 'javelin-install', 1893 + 'javelin-reactornode', 1894 + 'javelin-util', 1895 + 'javelin-reactor', 1896 1896 ), 1897 1897 'f726d506' => array( 1898 - 0 => 'javelin-behavior', 1899 - 1 => 'javelin-stratcom', 1900 - 2 => 'javelin-dom', 1901 - 3 => 'javelin-history', 1898 + 'javelin-behavior', 1899 + 'javelin-stratcom', 1900 + 'javelin-dom', 1901 + 'javelin-history', 1902 1902 ), 1903 1903 'f7379f45' => array( 1904 - 0 => 'javelin-behavior', 1905 - 1 => 'javelin-dom', 1906 - 2 => 'javelin-util', 1907 - 3 => 'phabricator-shaped-request', 1904 + 'javelin-behavior', 1905 + 'javelin-dom', 1906 + 'javelin-util', 1907 + 'phabricator-shaped-request', 1908 1908 ), 1909 1909 'f7f1289f' => array( 1910 - 0 => 'javelin-behavior', 1911 - 1 => 'javelin-dom', 1912 - 2 => 'javelin-stratcom', 1910 + 'javelin-behavior', 1911 + 'javelin-dom', 1912 + 'javelin-stratcom', 1913 1913 ), 1914 1914 'f7fc67ec' => array( 1915 - 0 => 'javelin-install', 1916 - 1 => 'javelin-typeahead', 1917 - 2 => 'javelin-dom', 1918 - 3 => 'javelin-request', 1919 - 4 => 'javelin-typeahead-ondemand-source', 1920 - 5 => 'javelin-util', 1915 + 'javelin-install', 1916 + 'javelin-typeahead', 1917 + 'javelin-dom', 1918 + 'javelin-request', 1919 + 'javelin-typeahead-ondemand-source', 1920 + 'javelin-util', 1921 1921 ), 1922 1922 'f8248bc5' => array( 1923 - 0 => 'javelin-behavior', 1924 - 1 => 'javelin-dom', 1925 - 2 => 'javelin-util', 1926 - 3 => 'javelin-json', 1927 - 4 => 'javelin-stratcom', 1928 - 5 => 'phabricator-shaped-request', 1923 + 'javelin-behavior', 1924 + 'javelin-dom', 1925 + 'javelin-util', 1926 + 'javelin-json', 1927 + 'javelin-stratcom', 1928 + 'phabricator-shaped-request', 1929 1929 ), 1930 1930 'f9539603' => array( 1931 - 0 => 'javelin-behavior', 1932 - 1 => 'javelin-dom', 1933 - 2 => 'javelin-stratcom', 1934 - 3 => 'javelin-uri', 1931 + 'javelin-behavior', 1932 + 'javelin-dom', 1933 + 'javelin-stratcom', 1934 + 'javelin-uri', 1935 1935 ), 1936 1936 'fa0f4fc2' => array( 1937 - 0 => 'javelin-behavior', 1938 - 1 => 'javelin-dom', 1939 - 2 => 'javelin-vector', 1940 - 3 => 'javelin-magical-init', 1937 + 'javelin-behavior', 1938 + 'javelin-dom', 1939 + 'javelin-vector', 1940 + 'javelin-magical-init', 1941 1941 ), 1942 1942 'fcba4ecc' => array( 1943 - 0 => 'javelin-install', 1944 - 1 => 'javelin-util', 1945 - 2 => 'javelin-dom', 1946 - 3 => 'javelin-typeahead-normalizer', 1943 + 'javelin-install', 1944 + 'javelin-util', 1945 + 'javelin-dom', 1946 + 'javelin-typeahead-normalizer', 1947 1947 ), 1948 1948 'fe9a552f' => array( 1949 - 0 => 'javelin-behavior', 1950 - 1 => 'multirow-row-manager', 1951 - 2 => 'javelin-dom', 1952 - 3 => 'javelin-util', 1953 - 4 => 'phabricator-prefab', 1954 - 5 => 'javelin-json', 1949 + 'javelin-behavior', 1950 + 'multirow-row-manager', 1951 + 'javelin-dom', 1952 + 'javelin-util', 1953 + 'phabricator-prefab', 1954 + 'javelin-json', 1955 1955 ), 1956 1956 42126667 => array( 1957 - 0 => 'javelin-behavior', 1958 - 1 => 'javelin-dom', 1959 - 2 => 'javelin-request', 1957 + 'javelin-behavior', 1958 + 'javelin-dom', 1959 + 'javelin-request', 1960 1960 ), 1961 1961 48086888 => array( 1962 - 0 => 'javelin-behavior', 1963 - 1 => 'javelin-dom', 1964 - 2 => 'javelin-workflow', 1962 + 'javelin-behavior', 1963 + 'javelin-dom', 1964 + 'javelin-workflow', 1965 1965 ), 1966 1966 60479091 => array( 1967 - 0 => 'phabricator-busy', 1968 - 1 => 'javelin-behavior', 1967 + 'phabricator-busy', 1968 + 'javelin-behavior', 1969 1969 ), 1970 1970 82439934 => array( 1971 - 0 => 'javelin-behavior', 1972 - 1 => 'javelin-dom', 1973 - 2 => 'javelin-util', 1974 - 3 => 'javelin-stratcom', 1975 - 4 => 'javelin-workflow', 1976 - 5 => 'phabricator-draggable-list', 1971 + 'javelin-behavior', 1972 + 'javelin-dom', 1973 + 'javelin-util', 1974 + 'javelin-stratcom', 1975 + 'javelin-workflow', 1976 + 'phabricator-draggable-list', 1977 1977 ), 1978 1978 ), 1979 1979 'packages' => array( 1980 1980 'core.pkg.css' => array( 1981 - 0 => 'phabricator-core-css', 1982 - 1 => 'phabricator-zindex-css', 1983 - 2 => 'phui-button-css', 1984 - 3 => 'phabricator-standard-page-view', 1985 - 4 => 'aphront-dialog-view-css', 1986 - 5 => 'phui-form-view-css', 1987 - 6 => 'aphront-panel-view-css', 1988 - 7 => 'aphront-table-view-css', 1989 - 8 => 'aphront-tokenizer-control-css', 1990 - 9 => 'aphront-typeahead-control-css', 1991 - 10 => 'aphront-list-filter-view-css', 1992 - 11 => 'phabricator-remarkup-css', 1993 - 12 => 'syntax-highlighting-css', 1994 - 13 => 'aphront-pager-view-css', 1995 - 14 => 'phabricator-transaction-view-css', 1996 - 15 => 'aphront-tooltip-css', 1997 - 16 => 'phabricator-flag-css', 1998 - 17 => 'aphront-error-view-css', 1999 - 18 => 'sprite-gradient-css', 2000 - 19 => 'sprite-menu-css', 2001 - 20 => 'sprite-apps-css', 2002 - 21 => 'sprite-apps-large-css', 2003 - 22 => 'phabricator-main-menu-view', 2004 - 23 => 'phabricator-notification-css', 2005 - 24 => 'phabricator-notification-menu-css', 2006 - 25 => 'lightbox-attachment-css', 2007 - 26 => 'phui-header-view-css', 2008 - 27 => 'phabricator-filetree-view-css', 2009 - 28 => 'phabricator-nav-view-css', 2010 - 29 => 'phabricator-side-menu-view-css', 2011 - 30 => 'phabricator-crumbs-view-css', 2012 - 31 => 'phui-object-item-list-view-css', 2013 - 32 => 'global-drag-and-drop-css', 2014 - 33 => 'phui-spacing-css', 2015 - 34 => 'phui-form-css', 2016 - 35 => 'phui-icon-view-css', 2017 - 36 => 'phabricator-application-launch-view-css', 2018 - 37 => 'phabricator-action-list-view-css', 2019 - 38 => 'phui-property-list-view-css', 2020 - 39 => 'phui-tag-view-css', 2021 - 40 => 'phui-list-view-css', 2022 - 41 => 'font-fontawesome', 2023 - 42 => 'phui-font-icon-base-css', 2024 - 43 => 'sprite-main-header-css', 2025 - 44 => 'phui-box-css', 2026 - 45 => 'phui-object-box-css', 2027 - 46 => 'phui-timeline-view-css', 2028 - 47 => 'sprite-tokens-css', 2029 - 48 => 'tokens-css', 2030 - 49 => 'phui-status-list-view-css', 1981 + 'phabricator-core-css', 1982 + 'phabricator-zindex-css', 1983 + 'phui-button-css', 1984 + 'phabricator-standard-page-view', 1985 + 'aphront-dialog-view-css', 1986 + 'phui-form-view-css', 1987 + 'aphront-panel-view-css', 1988 + 'aphront-table-view-css', 1989 + 'aphront-tokenizer-control-css', 1990 + 'aphront-typeahead-control-css', 1991 + 'aphront-list-filter-view-css', 1992 + 'phabricator-remarkup-css', 1993 + 'syntax-highlighting-css', 1994 + 'aphront-pager-view-css', 1995 + 'phabricator-transaction-view-css', 1996 + 'aphront-tooltip-css', 1997 + 'phabricator-flag-css', 1998 + 'aphront-error-view-css', 1999 + 'sprite-gradient-css', 2000 + 'sprite-menu-css', 2001 + 'sprite-apps-css', 2002 + 'sprite-apps-large-css', 2003 + 'phabricator-main-menu-view', 2004 + 'phabricator-notification-css', 2005 + 'phabricator-notification-menu-css', 2006 + 'lightbox-attachment-css', 2007 + 'phui-header-view-css', 2008 + 'phabricator-filetree-view-css', 2009 + 'phabricator-nav-view-css', 2010 + 'phabricator-side-menu-view-css', 2011 + 'phabricator-crumbs-view-css', 2012 + 'phui-object-item-list-view-css', 2013 + 'global-drag-and-drop-css', 2014 + 'phui-spacing-css', 2015 + 'phui-form-css', 2016 + 'phui-icon-view-css', 2017 + 'phabricator-application-launch-view-css', 2018 + 'phabricator-action-list-view-css', 2019 + 'phui-property-list-view-css', 2020 + 'phui-tag-view-css', 2021 + 'phui-list-view-css', 2022 + 'font-fontawesome', 2023 + 'phui-font-icon-base-css', 2024 + 'sprite-main-header-css', 2025 + 'phui-box-css', 2026 + 'phui-object-box-css', 2027 + 'phui-timeline-view-css', 2028 + 'sprite-tokens-css', 2029 + 'tokens-css', 2030 + 'phui-status-list-view-css', 2031 2031 ), 2032 2032 'core.pkg.js' => array( 2033 - 0 => 'javelin-util', 2034 - 1 => 'javelin-install', 2035 - 2 => 'javelin-event', 2036 - 3 => 'javelin-stratcom', 2037 - 4 => 'javelin-behavior', 2038 - 5 => 'javelin-resource', 2039 - 6 => 'javelin-request', 2040 - 7 => 'javelin-vector', 2041 - 8 => 'javelin-dom', 2042 - 9 => 'javelin-json', 2043 - 10 => 'javelin-uri', 2044 - 11 => 'javelin-workflow', 2045 - 12 => 'javelin-mask', 2046 - 13 => 'javelin-typeahead', 2047 - 14 => 'javelin-typeahead-normalizer', 2048 - 15 => 'javelin-typeahead-source', 2049 - 16 => 'javelin-typeahead-preloaded-source', 2050 - 17 => 'javelin-typeahead-ondemand-source', 2051 - 18 => 'javelin-tokenizer', 2052 - 19 => 'javelin-history', 2053 - 20 => 'javelin-router', 2054 - 21 => 'javelin-routable', 2055 - 22 => 'javelin-behavior-aphront-basic-tokenizer', 2056 - 23 => 'javelin-behavior-workflow', 2057 - 24 => 'javelin-behavior-aphront-form-disable-on-submit', 2058 - 25 => 'phabricator-keyboard-shortcut-manager', 2059 - 26 => 'phabricator-keyboard-shortcut', 2060 - 27 => 'javelin-behavior-phabricator-keyboard-shortcuts', 2061 - 28 => 'javelin-behavior-refresh-csrf', 2062 - 29 => 'javelin-behavior-phabricator-watch-anchor', 2063 - 30 => 'javelin-behavior-phabricator-autofocus', 2064 - 31 => 'phuix-dropdown-menu', 2065 - 32 => 'phuix-action-list-view', 2066 - 33 => 'phuix-action-view', 2067 - 34 => 'phabricator-phtize', 2068 - 35 => 'javelin-behavior-phabricator-oncopy', 2069 - 36 => 'phabricator-tooltip', 2070 - 37 => 'javelin-behavior-phabricator-tooltips', 2071 - 38 => 'phabricator-prefab', 2072 - 39 => 'javelin-behavior-device', 2073 - 40 => 'javelin-behavior-toggle-class', 2074 - 41 => 'javelin-behavior-lightbox-attachments', 2075 - 42 => 'phabricator-busy', 2076 - 43 => 'javelin-aphlict', 2077 - 44 => 'phabricator-notification', 2078 - 45 => 'javelin-behavior-aphlict-listen', 2079 - 46 => 'javelin-behavior-phabricator-search-typeahead', 2080 - 47 => 'javelin-behavior-konami', 2081 - 48 => 'javelin-behavior-aphlict-dropdown', 2082 - 49 => 'javelin-behavior-history-install', 2083 - 50 => 'javelin-behavior-phabricator-gesture', 2084 - 51 => 'javelin-behavior-phabricator-active-nav', 2085 - 52 => 'javelin-behavior-phabricator-nav', 2086 - 53 => 'javelin-behavior-phabricator-remarkup-assist', 2087 - 54 => 'phabricator-textareautils', 2088 - 55 => 'phabricator-file-upload', 2089 - 56 => 'javelin-behavior-global-drag-and-drop', 2090 - 57 => 'javelin-behavior-phabricator-reveal-content', 2091 - 58 => 'phabricator-hovercard', 2092 - 59 => 'javelin-behavior-phabricator-hovercards', 2093 - 60 => 'javelin-color', 2094 - 61 => 'javelin-fx', 2095 - 62 => 'phabricator-draggable-list', 2096 - 63 => 'javelin-behavior-phabricator-transaction-list', 2097 - 64 => 'javelin-behavior-phabricator-show-all-transactions', 2098 - 65 => 'javelin-behavior-phui-timeline-dropdown-menu', 2099 - 66 => 'javelin-behavior-doorkeeper-tag', 2033 + 'javelin-util', 2034 + 'javelin-install', 2035 + 'javelin-event', 2036 + 'javelin-stratcom', 2037 + 'javelin-behavior', 2038 + 'javelin-resource', 2039 + 'javelin-request', 2040 + 'javelin-vector', 2041 + 'javelin-dom', 2042 + 'javelin-json', 2043 + 'javelin-uri', 2044 + 'javelin-workflow', 2045 + 'javelin-mask', 2046 + 'javelin-typeahead', 2047 + 'javelin-typeahead-normalizer', 2048 + 'javelin-typeahead-source', 2049 + 'javelin-typeahead-preloaded-source', 2050 + 'javelin-typeahead-ondemand-source', 2051 + 'javelin-tokenizer', 2052 + 'javelin-history', 2053 + 'javelin-router', 2054 + 'javelin-routable', 2055 + 'javelin-behavior-aphront-basic-tokenizer', 2056 + 'javelin-behavior-workflow', 2057 + 'javelin-behavior-aphront-form-disable-on-submit', 2058 + 'phabricator-keyboard-shortcut-manager', 2059 + 'phabricator-keyboard-shortcut', 2060 + 'javelin-behavior-phabricator-keyboard-shortcuts', 2061 + 'javelin-behavior-refresh-csrf', 2062 + 'javelin-behavior-phabricator-watch-anchor', 2063 + 'javelin-behavior-phabricator-autofocus', 2064 + 'phuix-dropdown-menu', 2065 + 'phuix-action-list-view', 2066 + 'phuix-action-view', 2067 + 'phabricator-phtize', 2068 + 'javelin-behavior-phabricator-oncopy', 2069 + 'phabricator-tooltip', 2070 + 'javelin-behavior-phabricator-tooltips', 2071 + 'phabricator-prefab', 2072 + 'javelin-behavior-device', 2073 + 'javelin-behavior-toggle-class', 2074 + 'javelin-behavior-lightbox-attachments', 2075 + 'phabricator-busy', 2076 + 'javelin-aphlict', 2077 + 'phabricator-notification', 2078 + 'javelin-behavior-aphlict-listen', 2079 + 'javelin-behavior-phabricator-search-typeahead', 2080 + 'javelin-behavior-konami', 2081 + 'javelin-behavior-aphlict-dropdown', 2082 + 'javelin-behavior-history-install', 2083 + 'javelin-behavior-phabricator-gesture', 2084 + 'javelin-behavior-phabricator-active-nav', 2085 + 'javelin-behavior-phabricator-nav', 2086 + 'javelin-behavior-phabricator-remarkup-assist', 2087 + 'phabricator-textareautils', 2088 + 'phabricator-file-upload', 2089 + 'javelin-behavior-global-drag-and-drop', 2090 + 'javelin-behavior-phabricator-reveal-content', 2091 + 'phabricator-hovercard', 2092 + 'javelin-behavior-phabricator-hovercards', 2093 + 'javelin-color', 2094 + 'javelin-fx', 2095 + 'phabricator-draggable-list', 2096 + 'javelin-behavior-phabricator-transaction-list', 2097 + 'javelin-behavior-phabricator-show-all-transactions', 2098 + 'javelin-behavior-phui-timeline-dropdown-menu', 2099 + 'javelin-behavior-doorkeeper-tag', 2100 2100 ), 2101 2101 'darkconsole.pkg.js' => array( 2102 - 0 => 'javelin-behavior-dark-console', 2103 - 1 => 'javelin-behavior-error-log', 2102 + 'javelin-behavior-dark-console', 2103 + 'javelin-behavior-error-log', 2104 2104 ), 2105 2105 'differential.pkg.css' => array( 2106 - 0 => 'differential-core-view-css', 2107 - 1 => 'differential-changeset-view-css', 2108 - 2 => 'differential-results-table-css', 2109 - 3 => 'differential-revision-history-css', 2110 - 4 => 'differential-revision-list-css', 2111 - 5 => 'differential-table-of-contents-css', 2112 - 6 => 'differential-revision-comment-css', 2113 - 7 => 'differential-revision-add-comment-css', 2114 - 8 => 'phabricator-object-selector-css', 2115 - 9 => 'phabricator-content-source-view-css', 2116 - 10 => 'inline-comment-summary-css', 2106 + 'differential-core-view-css', 2107 + 'differential-changeset-view-css', 2108 + 'differential-results-table-css', 2109 + 'differential-revision-history-css', 2110 + 'differential-revision-list-css', 2111 + 'differential-table-of-contents-css', 2112 + 'differential-revision-comment-css', 2113 + 'differential-revision-add-comment-css', 2114 + 'phabricator-object-selector-css', 2115 + 'phabricator-content-source-view-css', 2116 + 'inline-comment-summary-css', 2117 2117 ), 2118 2118 'differential.pkg.js' => array( 2119 - 0 => 'phabricator-drag-and-drop-file-upload', 2120 - 1 => 'phabricator-shaped-request', 2121 - 2 => 'javelin-behavior-differential-feedback-preview', 2122 - 3 => 'javelin-behavior-differential-edit-inline-comments', 2123 - 4 => 'javelin-behavior-differential-populate', 2124 - 5 => 'javelin-behavior-differential-show-more', 2125 - 6 => 'javelin-behavior-differential-diff-radios', 2126 - 7 => 'javelin-behavior-differential-comment-jump', 2127 - 8 => 'javelin-behavior-differential-add-reviewers-and-ccs', 2128 - 9 => 'javelin-behavior-differential-keyboard-navigation', 2129 - 10 => 'javelin-behavior-aphront-drag-and-drop-textarea', 2130 - 11 => 'javelin-behavior-phabricator-object-selector', 2131 - 12 => 'javelin-behavior-repository-crossreference', 2132 - 13 => 'javelin-behavior-load-blame', 2133 - 14 => 'differential-inline-comment-editor', 2134 - 15 => 'javelin-behavior-differential-dropdown-menus', 2135 - 16 => 'javelin-behavior-differential-toggle-files', 2136 - 17 => 'javelin-behavior-differential-user-select', 2137 - 18 => 'javelin-behavior-aphront-more', 2119 + 'phabricator-drag-and-drop-file-upload', 2120 + 'phabricator-shaped-request', 2121 + 'javelin-behavior-differential-feedback-preview', 2122 + 'javelin-behavior-differential-edit-inline-comments', 2123 + 'javelin-behavior-differential-populate', 2124 + 'javelin-behavior-differential-show-more', 2125 + 'javelin-behavior-differential-diff-radios', 2126 + 'javelin-behavior-differential-comment-jump', 2127 + 'javelin-behavior-differential-add-reviewers-and-ccs', 2128 + 'javelin-behavior-differential-keyboard-navigation', 2129 + 'javelin-behavior-aphront-drag-and-drop-textarea', 2130 + 'javelin-behavior-phabricator-object-selector', 2131 + 'javelin-behavior-repository-crossreference', 2132 + 'javelin-behavior-load-blame', 2133 + 'differential-inline-comment-editor', 2134 + 'javelin-behavior-differential-dropdown-menus', 2135 + 'javelin-behavior-differential-toggle-files', 2136 + 'javelin-behavior-differential-user-select', 2137 + 'javelin-behavior-aphront-more', 2138 2138 ), 2139 2139 'diffusion.pkg.css' => array( 2140 - 0 => 'diffusion-commit-view-css', 2141 - 1 => 'diffusion-icons-css', 2140 + 'diffusion-commit-view-css', 2141 + 'diffusion-icons-css', 2142 2142 ), 2143 2143 'diffusion.pkg.js' => array( 2144 - 0 => 'javelin-behavior-diffusion-pull-lastmodified', 2145 - 1 => 'javelin-behavior-diffusion-commit-graph', 2146 - 2 => 'javelin-behavior-audit-preview', 2144 + 'javelin-behavior-diffusion-pull-lastmodified', 2145 + 'javelin-behavior-diffusion-commit-graph', 2146 + 'javelin-behavior-audit-preview', 2147 2147 ), 2148 2148 'maniphest.pkg.css' => array( 2149 - 0 => 'maniphest-task-summary-css', 2149 + 'maniphest-task-summary-css', 2150 2150 ), 2151 2151 'maniphest.pkg.js' => array( 2152 - 0 => 'javelin-behavior-maniphest-batch-selector', 2153 - 1 => 'javelin-behavior-maniphest-transaction-controls', 2154 - 2 => 'javelin-behavior-maniphest-transaction-preview', 2155 - 3 => 'javelin-behavior-maniphest-transaction-expand', 2156 - 4 => 'javelin-behavior-maniphest-subpriority-editor', 2157 - 5 => 'javelin-behavior-maniphest-list-editor', 2152 + 'javelin-behavior-maniphest-batch-selector', 2153 + 'javelin-behavior-maniphest-transaction-controls', 2154 + 'javelin-behavior-maniphest-transaction-preview', 2155 + 'javelin-behavior-maniphest-transaction-expand', 2156 + 'javelin-behavior-maniphest-subpriority-editor', 2157 + 'javelin-behavior-maniphest-list-editor', 2158 2158 ), 2159 2159 ), 2160 2160 );
+11
resources/sql/autopatches/20140721.phortune.1.cart.sql
··· 1 + CREATE TABLE {$NAMESPACE}_phortune.phortune_cart ( 2 + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, 3 + phid VARCHAR(64) NOT NULL COLLATE utf8_bin, 4 + accountPHID VARCHAR(64) NOT NULL COLLATE utf8_bin, 5 + authorPHID VARCHAR(64) NOT NULL COLLATE utf8_bin, 6 + metadata LONGTEXT NOT NULL COLLATE utf8_bin, 7 + dateCreated INT UNSIGNED NOT NULL, 8 + dateModified INT UNSIGNED NOT NULL, 9 + UNIQUE KEY `key_phid` (phid), 10 + KEY `key_account` (accountPHID) 11 + ) ENGINE=InnoDB, COLLATE utf8_general_ci;
+17
resources/sql/autopatches/20140721.phortune.2.purchase.sql
··· 1 + CREATE TABLE {$NAMESPACE}_phortune.phortune_purchase ( 2 + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, 3 + phid VARCHAR(64) NOT NULL COLLATE utf8_bin, 4 + productPHID VARCHAR(64) NOT NULL COLLATE utf8_bin, 5 + accountPHID VARCHAR(64) NOT NULL COLLATE utf8_bin, 6 + authorPHID VARCHAR(64) NOT NULL COLLATE utf8_bin, 7 + cartPHID VARCHAR(64) COLLATE utf8_bin, 8 + basePriceInCents INT NOT NULL, 9 + quantity INT UNSIGNED NOT NULL, 10 + totalPriceInCents INT NOT NULL, 11 + status VARCHAR(32) NOT NULL COLLATE utf8_bin, 12 + metadata LONGTEXT NOT NULL COLLATE utf8_bin, 13 + dateCreated INT UNSIGNED NOT NULL, 14 + dateModified INT UNSIGNED NOT NULL, 15 + UNIQUE KEY `key_phid` (phid), 16 + KEY `key_cart` (cartPHID) 17 + ) ENGINE=InnoDB, COLLATE utf8_general_ci;
+14 -2
src/__phutil_library_map__.php
··· 2496 2496 'PhortuneAccountViewController' => 'applications/phortune/controller/PhortuneAccountViewController.php', 2497 2497 'PhortuneBalancedPaymentProvider' => 'applications/phortune/provider/PhortuneBalancedPaymentProvider.php', 2498 2498 'PhortuneCart' => 'applications/phortune/storage/PhortuneCart.php', 2499 + 'PhortuneCartQuery' => 'applications/phortune/query/PhortuneCartQuery.php', 2499 2500 'PhortuneCharge' => 'applications/phortune/storage/PhortuneCharge.php', 2500 2501 'PhortuneConstants' => 'applications/phortune/constants/PhortuneConstants.php', 2501 2502 'PhortuneController' => 'applications/phortune/controller/PhortuneController.php', ··· 2521 2522 'PhortuneProductEditController' => 'applications/phortune/controller/PhortuneProductEditController.php', 2522 2523 'PhortuneProductEditor' => 'applications/phortune/editor/PhortuneProductEditor.php', 2523 2524 'PhortuneProductListController' => 'applications/phortune/controller/PhortuneProductListController.php', 2525 + 'PhortuneProductPurchaseController' => 'applications/phortune/controller/PhortuneProductPurchaseController.php', 2524 2526 'PhortuneProductQuery' => 'applications/phortune/query/PhortuneProductQuery.php', 2525 2527 'PhortuneProductTransaction' => 'applications/phortune/storage/PhortuneProductTransaction.php', 2526 2528 'PhortuneProductTransactionQuery' => 'applications/phortune/query/PhortuneProductTransactionQuery.php', 2527 2529 'PhortuneProductViewController' => 'applications/phortune/controller/PhortuneProductViewController.php', 2528 2530 'PhortuneProviderController' => 'applications/phortune/controller/PhortuneProviderController.php', 2529 2531 'PhortunePurchase' => 'applications/phortune/storage/PhortunePurchase.php', 2532 + 'PhortunePurchaseQuery' => 'applications/phortune/query/PhortunePurchaseQuery.php', 2530 2533 'PhortuneStripePaymentProvider' => 'applications/phortune/provider/PhortuneStripePaymentProvider.php', 2531 2534 'PhortuneTestExtraPaymentProvider' => 'applications/phortune/provider/__tests__/PhortuneTestExtraPaymentProvider.php', 2532 2535 'PhortuneTestPaymentProvider' => 'applications/phortune/provider/PhortuneTestPaymentProvider.php', ··· 5374 5377 'PhortuneAccountTransactionQuery' => 'PhabricatorApplicationTransactionQuery', 5375 5378 'PhortuneAccountViewController' => 'PhortuneController', 5376 5379 'PhortuneBalancedPaymentProvider' => 'PhortunePaymentProvider', 5377 - 'PhortuneCart' => 'PhortuneDAO', 5380 + 'PhortuneCart' => array( 5381 + 'PhortuneDAO', 5382 + 'PhabricatorPolicyInterface', 5383 + ), 5384 + 'PhortuneCartQuery' => 'PhabricatorCursorPagedPolicyAwareQuery', 5378 5385 'PhortuneCharge' => 'PhortuneDAO', 5379 5386 'PhortuneController' => 'PhabricatorController', 5380 5387 'PhortuneCurrencyTestCase' => 'PhabricatorTestCase', ··· 5402 5409 'PhortuneProductEditController' => 'PhabricatorController', 5403 5410 'PhortuneProductEditor' => 'PhabricatorApplicationTransactionEditor', 5404 5411 'PhortuneProductListController' => 'PhabricatorController', 5412 + 'PhortuneProductPurchaseController' => 'PhortuneController', 5405 5413 'PhortuneProductQuery' => 'PhabricatorCursorPagedPolicyAwareQuery', 5406 5414 'PhortuneProductTransaction' => 'PhabricatorApplicationTransaction', 5407 5415 'PhortuneProductTransactionQuery' => 'PhabricatorApplicationTransactionQuery', 5408 5416 'PhortuneProductViewController' => 'PhortuneController', 5409 5417 'PhortuneProviderController' => 'PhortuneController', 5410 - 'PhortunePurchase' => 'PhortuneDAO', 5418 + 'PhortunePurchase' => array( 5419 + 'PhortuneDAO', 5420 + 'PhabricatorPolicyInterface', 5421 + ), 5422 + 'PhortunePurchaseQuery' => 'PhabricatorCursorPagedPolicyAwareQuery', 5411 5423 'PhortuneStripePaymentProvider' => 'PhortunePaymentProvider', 5412 5424 'PhortuneTestExtraPaymentProvider' => 'PhortunePaymentProvider', 5413 5425 'PhortuneTestPaymentProvider' => 'PhortunePaymentProvider',
+2 -1
src/applications/phortune/application/PhabricatorPhortuneApplication.php
··· 39 39 'paymentmethod/' => array( 40 40 'edit/' => 'PhortunePaymentMethodEditController', 41 41 ), 42 - 'buy/(?P<id>\d+)/' => 'PhortuneAccountBuyController', 42 + 'buy/(?P<productID>\d+)/' => 'PhortuneProductPurchaseController', 43 43 ), 44 + 'cart/(?P<id>\d+)/' => 'PhortuneAccountBuyController', 44 45 'account/' => array( 45 46 '' => 'PhortuneAccountListController', 46 47 'edit/(?:(?P<id>\d+)/)?' => 'PhortuneAccountEditController',
+6 -32
src/applications/phortune/controller/PhortuneAccountBuyController.php
··· 3 3 final class PhortuneAccountBuyController 4 4 extends PhortuneController { 5 5 6 - private $accountID; 7 6 private $id; 8 7 9 8 public function willProcessRequest(array $data) { 10 - $this->accountID = $data['accountID']; 11 9 $this->id = $data['id']; 12 10 } 13 11 ··· 15 13 $request = $this->getRequest(); 16 14 $user = $request->getUser(); 17 15 18 - $account = id(new PhortuneAccountQuery()) 19 - ->setViewer($user) 20 - ->withIDs(array($this->accountID)) 21 - ->executeOne(); 22 - if (!$account) { 23 - return new Aphront404Response(); 24 - } 25 - 26 - $account_uri = $this->getApplicationURI($account->getID().'/'); 27 - 28 - $product = id(new PhortuneProductQuery()) 16 + $cart = id(new PhortuneCartQuery()) 29 17 ->setViewer($user) 30 18 ->withIDs(array($this->id)) 19 + ->needPurchases(true) 31 20 ->executeOne(); 32 - if (!$product) { 21 + if (!$cart) { 33 22 return new Aphront404Response(); 34 23 } 35 24 36 - $purchase = new PhortunePurchase(); 37 - $purchase->setProductPHID($product->getPHID()); 38 - $purchase->setAccountPHID($account->getPHID()); 39 - $purchase->setPurchaseName($product->getProductName()); 40 - $purchase->setBasePriceInCents($product->getPriceInCents()); 41 - $purchase->setQuantity(1); 42 - $purchase->setTotalPriceInCents( 43 - $purchase->getBasePriceInCents() * $purchase->getQuantity()); 44 - $purchase->setStatus(PhortunePurchase::STATUS_PENDING); 45 - 46 - $cart = new PhortuneCart(); 47 - $cart->setAccountPHID($account->getPHID()); 48 - $cart->setOwnerPHID($user->getPHID()); 49 - $cart->attachPurchases( 50 - array( 51 - $purchase, 52 - )); 25 + $account = $cart->getAccount(); 26 + $account_uri = $this->getApplicationURI($account->getID().'/'); 53 27 54 28 $rows = array(); 55 29 $total = 0; 56 30 foreach ($cart->getPurchases() as $purchase) { 57 31 $rows[] = array( 58 - $purchase->getPurchaseName(), 32 + pht('A Purchase'), 59 33 PhortuneCurrency::newFromUSDCents($purchase->getBasePriceInCents()) 60 34 ->formatForDisplay(), 61 35 $purchase->getQuantity(),
+2 -1
src/applications/phortune/controller/PhortunePaymentMethodEditController.php
··· 211 211 'as a payment method.'); 212 212 break; 213 213 default: 214 - $message = $provider->getCreatePaymentErrorMessage($client_error); 214 + $message = $provider->getCreatePaymentMethodErrorMessage( 215 + $client_error); 215 216 if (!$message) { 216 217 $message = pht( 217 218 "There was an unexpected error ('%s') processing payment ".
+4 -5
src/applications/phortune/controller/PhortuneProductEditController.php
··· 142 142 $is_create ? pht('Create') : pht('Edit'), 143 143 $request->getRequestURI()); 144 144 145 - $header = id(new PHUIHeaderView()) 146 - ->setHeader(pht('Edit Product')); 145 + $box = id(new PHUIObjectBoxView()) 146 + ->setHeaderText(pht('Edit Product')) 147 + ->appendChild($form); 147 148 148 149 return $this->buildApplicationPage( 149 150 array( 150 151 $crumbs, 151 - $header, 152 - $errors, 153 - $form, 152 + $box, 154 153 ), 155 154 array( 156 155 'title' => $title,
+70
src/applications/phortune/controller/PhortuneProductPurchaseController.php
··· 1 + <?php 2 + 3 + final class PhortuneProductPurchaseController 4 + extends PhortuneController { 5 + 6 + private $accountID; 7 + private $productID; 8 + 9 + public function willProcessRequest(array $data) { 10 + $this->accountID = $data['accountID']; 11 + $this->productID = $data['productID']; 12 + } 13 + 14 + public function processRequest() { 15 + $request = $this->getRequest(); 16 + $user = $request->getUser(); 17 + 18 + $account = id(new PhortuneAccountQuery()) 19 + ->setViewer($user) 20 + ->withIDs(array($this->accountID)) 21 + ->executeOne(); 22 + if (!$account) { 23 + return new Aphront404Response(); 24 + } 25 + 26 + $account_uri = $this->getApplicationURI($account->getID().'/'); 27 + 28 + $product = id(new PhortuneProductQuery()) 29 + ->setViewer($user) 30 + ->withIDs(array($this->productID)) 31 + ->executeOne(); 32 + if (!$product) { 33 + return new Aphront404Response(); 34 + } 35 + 36 + if ($request->isFormPost()) { 37 + // TODO: Use ApplicationTransations. 38 + 39 + $cart = new PhortuneCart(); 40 + $cart->openTransaction(); 41 + 42 + $cart->setAccountPHID($account->getPHID()); 43 + $cart->setAuthorPHID($user->getPHID()); 44 + $cart->save(); 45 + 46 + $purchase = new PhortunePurchase(); 47 + $purchase->setProductPHID($product->getPHID()); 48 + $purchase->setAccountPHID($account->getPHID()); 49 + $purchase->setAuthorPHID($user->getPHID()); 50 + $purchase->setCartPHID($cart->getPHID()); 51 + $purchase->setBasePriceInCents($product->getPriceInCents()); 52 + $purchase->setQuantity(1); 53 + $purchase->setTotalPriceInCents( 54 + $purchase->getBasePriceInCents() * $purchase->getQuantity()); 55 + $purchase->setStatus(PhortunePurchase::STATUS_PENDING); 56 + $purchase->save(); 57 + 58 + $cart->saveTransaction(); 59 + 60 + $cart_uri = $this->getApplicationURI('/cart/'.$cart->getID().'/'); 61 + return id(new AphrontRedirectResponse())->setURI($cart_uri); 62 + } 63 + 64 + return $this->newDialog() 65 + ->setTitle(pht('Purchase Product')) 66 + ->appendParagraph(pht('Really purchase this stuff?')) 67 + ->addSubmitButton(pht('Checkout')) 68 + ->addCancelButton($account_uri); 69 + } 70 + }
+1 -1
src/applications/phortune/controller/PhortuneProductViewController.php
··· 46 46 ->setName(pht('Purchase')) 47 47 ->setHref($cart_uri) 48 48 ->setIcon('fa-shopping-cart') 49 - ->setRenderAsForm(true)); 49 + ->setWorkflow(true)); 50 50 51 51 $crumbs = $this->buildApplicationCrumbs(); 52 52 $crumbs->setActionList($actions);
+2 -1
src/applications/phortune/currency/PhortuneCurrency.php
··· 54 54 55 55 public static function newFromUSDCents($cents) { 56 56 if (!is_int($cents)) { 57 - throw new Exception('USDCents value is not an integer!'); 57 + throw new Exception( 58 + pht('USDCents value "%s" is not an integer!', $cents)); 58 59 } 59 60 60 61 $obj = new PhortuneCurrency();
+2 -1
src/applications/phortune/provider/PhortuneStripePaymentProvider.php
··· 110 110 $customer = Stripe_Customer::create($params, $secret_key); 111 111 112 112 $card = $info->card; 113 + 113 114 $method 114 - ->setBrand($card->type) 115 + ->setBrand($card->brand) 115 116 ->setLastFourDigits($card->last4) 116 117 ->setExpires($card->exp_year, $card->exp_month) 117 118 ->setMetadata(
+102
src/applications/phortune/query/PhortuneCartQuery.php
··· 1 + <?php 2 + 3 + final class PhortuneCartQuery 4 + extends PhabricatorCursorPagedPolicyAwareQuery { 5 + 6 + private $ids; 7 + private $phids; 8 + 9 + private $needPurchases; 10 + 11 + public function withIDs(array $ids) { 12 + $this->ids = $ids; 13 + return $this; 14 + } 15 + 16 + public function withPHIDs(array $phids) { 17 + $this->phids = $phids; 18 + return $this; 19 + } 20 + 21 + public function needPurchases($need_purchases) { 22 + $this->needPurchases = $need_purchases; 23 + return $this; 24 + } 25 + 26 + protected function loadPage() { 27 + $table = new PhortuneCart(); 28 + $conn = $table->establishConnection('r'); 29 + 30 + $rows = queryfx_all( 31 + $conn, 32 + 'SELECT cart.* FROM %T cart %Q %Q %Q', 33 + $table->getTableName(), 34 + $this->buildWhereClause($conn), 35 + $this->buildOrderClause($conn), 36 + $this->buildLimitClause($conn)); 37 + 38 + return $table->loadAllFromArray($rows); 39 + } 40 + 41 + protected function willFilterPage(array $carts) { 42 + $accounts = id(new PhortuneAccountQuery()) 43 + ->setViewer($this->getViewer()) 44 + ->withPHIDs(mpull($carts, 'getAccountPHID')) 45 + ->execute(); 46 + $accounts = mpull($accounts, null, 'getPHID'); 47 + 48 + foreach ($carts as $key => $cart) { 49 + $account = idx($accounts, $cart->getAccountPHID()); 50 + if (!$account) { 51 + unset($carts[$key]); 52 + } 53 + $cart->attachAccount($account); 54 + } 55 + 56 + return $carts; 57 + } 58 + 59 + protected function didFilterPage(array $carts) { 60 + if ($this->needPurchases) { 61 + $purchases = id(new PhortunePurchaseQuery()) 62 + ->setViewer($this->getViewer()) 63 + ->setParentQuery($this) 64 + ->withCartPHIDs(mpull($carts, 'getPHID')) 65 + ->execute(); 66 + 67 + $purchases = mgroup($purchases, 'getCartPHID'); 68 + foreach ($carts as $cart) { 69 + $cart->attachPurchases(idx($purchases, $cart->getPHID(), array())); 70 + } 71 + } 72 + 73 + return $carts; 74 + } 75 + 76 + private function buildWhereClause(AphrontDatabaseConnection $conn) { 77 + $where = array(); 78 + 79 + $where[] = $this->buildPagingClause($conn); 80 + 81 + if ($this->ids !== null) { 82 + $where[] = qsprintf( 83 + $conn, 84 + 'cart.id IN (%Ld)', 85 + $this->ids); 86 + } 87 + 88 + if ($this->phids !== null) { 89 + $where[] = qsprintf( 90 + $conn, 91 + 'cart.phid IN (%Ls)', 92 + $this->phids); 93 + } 94 + 95 + return $this->formatWhereClause($where); 96 + } 97 + 98 + public function getQueryApplicationClass() { 99 + return 'PhabricatorApplicationPhortune'; 100 + } 101 + 102 + }
+91
src/applications/phortune/query/PhortunePurchaseQuery.php
··· 1 + <?php 2 + 3 + final class PhortunePurchaseQuery 4 + extends PhabricatorCursorPagedPolicyAwareQuery { 5 + 6 + private $ids; 7 + private $phids; 8 + private $cartPHIDs; 9 + 10 + public function withIDs(array $ids) { 11 + $this->ids = $ids; 12 + return $this; 13 + } 14 + 15 + public function withPHIDs(array $phids) { 16 + $this->phids = $phids; 17 + return $this; 18 + } 19 + 20 + public function withCartPHIDs(array $cart_phids) { 21 + $this->cartPHIDs = $cart_phids; 22 + return $this; 23 + } 24 + 25 + protected function loadPage() { 26 + $table = new PhortunePurchase(); 27 + $conn = $table->establishConnection('r'); 28 + 29 + $rows = queryfx_all( 30 + $conn, 31 + 'SELECT purchase.* FROM %T purchase %Q %Q %Q', 32 + $table->getTableName(), 33 + $this->buildWhereClause($conn), 34 + $this->buildOrderClause($conn), 35 + $this->buildLimitClause($conn)); 36 + 37 + return $table->loadAllFromArray($rows); 38 + } 39 + 40 + protected function willFilterPage(array $purchases) { 41 + $carts = id(new PhabricatorObjectQuery()) 42 + ->setViewer($this->getViewer()) 43 + ->setParentQuery($this) 44 + ->withPHIDs(mpull($purchases, 'getCartPHID')) 45 + ->execute(); 46 + 47 + foreach ($purchases as $key => $purchase) { 48 + $cart = idx($carts, $purchase->getCartPHID()); 49 + if (!$cart) { 50 + unset($purchases[$key]); 51 + } 52 + $purchase->attachCart($cart); 53 + } 54 + 55 + return $purchases; 56 + } 57 + 58 + private function buildWhereClause(AphrontDatabaseConnection $conn) { 59 + $where = array(); 60 + 61 + $where[] = $this->buildPagingClause($conn); 62 + 63 + if ($this->ids !== null) { 64 + $where[] = qsprintf( 65 + $conn, 66 + 'purchase.id IN (%Ld)', 67 + $this->ids); 68 + } 69 + 70 + if ($this->phids !== null) { 71 + $where[] = qsprintf( 72 + $conn, 73 + 'purchase.phid IN (%Ls)', 74 + $this->phids); 75 + } 76 + 77 + if ($this->cartPHIDs !== null) { 78 + $where[] = qsprintf( 79 + $conn, 80 + 'purchase.cartPHID IN (%Ls)', 81 + $this->cartPHIDs); 82 + } 83 + 84 + return $this->formatWhereClause($where); 85 + } 86 + 87 + public function getQueryApplicationClass() { 88 + return 'PhabricatorApplicationPhortune'; 89 + } 90 + 91 + }
+40 -6
src/applications/phortune/storage/PhortuneCart.php
··· 1 1 <?php 2 2 3 - final class PhortuneCart extends PhortuneDAO { 3 + final class PhortuneCart extends PhortuneDAO 4 + implements PhabricatorPolicyInterface { 4 5 5 6 protected $accountPHID; 6 - protected $ownerPHID; 7 + protected $authorPHID; 7 8 protected $metadata; 8 9 10 + private $account = self::ATTACHABLE; 9 11 private $purchases = self::ATTACHABLE; 10 12 11 13 public function getConfiguration() { ··· 22 24 PhabricatorPHIDConstants::PHID_TYPE_CART); 23 25 } 24 26 27 + public function getTotalInCents() { 28 + return 123; 29 + } 30 + 25 31 public function attachPurchases(array $purchases) { 26 32 assert_instances_of($purchases, 'PhortunePurchase'); 27 33 $this->purchases = $purchases; 28 34 return $this; 29 35 } 30 36 31 - public function getTotalInCents() { 32 - return 123; 37 + public function getPurchases() { 38 + return $this->assertAttached($this->purchases); 39 + } 40 + 41 + public function attachAccount(PhortuneAccount $account) { 42 + $this->account = $account; 43 + return $this; 33 44 } 34 45 35 - public function getPurchases() { 36 - return $this->assertAttached($this->purchases); 46 + public function getAccount() { 47 + return $this->assertAttached($this->account); 48 + } 49 + 50 + 51 + /* -( PhabricatorPolicyInterface )----------------------------------------- */ 52 + 53 + 54 + public function getCapabilities() { 55 + return array( 56 + PhabricatorPolicyCapability::CAN_VIEW, 57 + PhabricatorPolicyCapability::CAN_EDIT, 58 + ); 59 + } 60 + 61 + public function getPolicy($capability) { 62 + return $this->getAccount()->getPolicy($capability); 63 + } 64 + 65 + public function hasAutomaticCapability($capability, PhabricatorUser $viewer) { 66 + return $this->getAccount()->hasAutomaticCapability($capability, $viewer); 67 + } 68 + 69 + public function describeAutomaticCapability($capability) { 70 + return pht('Carts inherit the policies of the associated account.'); 37 71 } 38 72 39 73 }
+43 -6
src/applications/phortune/storage/PhortunePurchase.php
··· 3 3 /** 4 4 * A purchase represents a user buying something or a subscription to a plan. 5 5 */ 6 - final class PhortunePurchase extends PhortuneDAO { 6 + final class PhortunePurchase extends PhortuneDAO 7 + implements PhabricatorPolicyInterface { 7 8 8 9 const STATUS_PENDING = 'purchase:pending'; 9 10 const STATUS_PROCESSING = 'purchase:processing'; ··· 15 16 protected $productPHID; 16 17 protected $accountPHID; 17 18 protected $authorPHID; 18 - protected $purchaseName; 19 - protected $purchaseURI; 20 - protected $paymentMethodPHID; 19 + protected $cartPHID; 21 20 protected $basePriceInCents; 22 - protected $priceAdjustmentInCents; 23 - protected $finalPriceInCents; 24 21 protected $quantity; 25 22 protected $totalPriceInCents; 26 23 protected $status; 27 24 protected $metadata; 25 + 26 + private $cart = self::ATTACHABLE; 28 27 29 28 public function getConfiguration() { 30 29 return array( ··· 38 37 public function generatePHID() { 39 38 return PhabricatorPHID::generateNewPHID( 40 39 PhabricatorPHIDConstants::PHID_TYPE_PRCH); 40 + } 41 + 42 + public function attachCart(PhortuneCart $cart) { 43 + $this->cart = $cart; 44 + return $this; 45 + } 46 + 47 + public function getCart() { 48 + return $this->assertAttached($this->cart); 49 + } 50 + 51 + protected function didReadData() { 52 + // The payment processing code is strict about types. 53 + $this->basePriceInCents = (int)$this->basePriceInCents; 54 + $this->totalPriceInCents = (int)$this->totalPriceInCents; 55 + } 56 + 57 + 58 + /* -( PhabricatorPolicyInterface )----------------------------------------- */ 59 + 60 + 61 + public function getCapabilities() { 62 + return array( 63 + PhabricatorPolicyCapability::CAN_VIEW, 64 + PhabricatorPolicyCapability::CAN_EDIT, 65 + ); 66 + } 67 + 68 + public function getPolicy($capability) { 69 + return $this->getCart()->getPolicy($capability); 70 + } 71 + 72 + public function hasAutomaticCapability($capability, PhabricatorUser $viewer) { 73 + return $this->getCart()->hasAutomaticCapability($capability, $viewer); 74 + } 75 + 76 + public function describeAutomaticCapability($capability) { 77 + return pht('Purchases have the policies of their cart.'); 41 78 } 42 79 43 80 }