diff --git a/src/__celerity_resource_map__.php b/src/__celerity_resource_map__.php index a19bbfbe1..9b22c44bd 100644 --- a/src/__celerity_resource_map__.php +++ b/src/__celerity_resource_map__.php @@ -1,4711 +1,4711 @@ array( 'hash' => 'ae90914d120ac3838ddc633b480343f3', 'uri' => '/res/ae90914d/rsrc/image/actions/edit.png', 'disk' => '/rsrc/image/actions/edit.png', 'type' => 'png', ), '/rsrc/image/apple-touch-icon.png' => array( 'hash' => '3380adf2dd4a5efa0885618bc5943640', 'uri' => '/res/3380adf2/rsrc/image/apple-touch-icon.png', 'disk' => '/rsrc/image/apple-touch-icon.png', 'type' => 'png', ), '/rsrc/image/avatar.png' => array( 'hash' => '1c5f255071537f05406adee86717ff27', 'uri' => '/res/1c5f2550/rsrc/image/avatar.png', 'disk' => '/rsrc/image/avatar.png', 'type' => 'png', ), '/rsrc/image/checker_dark.png' => array( 'hash' => '640f795343df76ebe5409aae6187e57f', 'uri' => '/res/640f7953/rsrc/image/checker_dark.png', 'disk' => '/rsrc/image/checker_dark.png', 'type' => 'png', ), '/rsrc/image/checker_light.png' => array( 'hash' => '7f8f3ef8beb0f2cc4cc69efb9e1c3308', 'uri' => '/res/7f8f3ef8/rsrc/image/checker_light.png', 'disk' => '/rsrc/image/checker_light.png', 'type' => 'png', ), '/rsrc/image/credit_cards.png' => array( 'hash' => '681448de424ea159b6ea68af04c046ae', 'uri' => '/res/681448de/rsrc/image/credit_cards.png', 'disk' => '/rsrc/image/credit_cards.png', 'type' => 'png', ), '/rsrc/image/darkload.gif' => array( 'hash' => '3a52cb7145d6e70f461fed21273117f2', 'uri' => '/res/3a52cb71/rsrc/image/darkload.gif', 'disk' => '/rsrc/image/darkload.gif', 'type' => 'gif', ), '/rsrc/image/divot.png' => array( 'hash' => '3be267bd11ea375bf68e808893718e0e', 'uri' => '/res/3be267bd/rsrc/image/divot.png', 'disk' => '/rsrc/image/divot.png', 'type' => 'png', ), '/rsrc/image/grippy_texture.png' => array( 'hash' => 'a8945e12ceeaddd5b491a8d81cfa19c1', 'uri' => '/res/a8945e12/rsrc/image/grippy_texture.png', 'disk' => '/rsrc/image/grippy_texture.png', 'type' => 'png', ), '/rsrc/image/icon/fatcow/arrow_branch.png' => array( 'hash' => 'f27b67520766e3d971722bcff703f3a8', 'uri' => '/res/f27b6752/rsrc/image/icon/fatcow/arrow_branch.png', 'disk' => '/rsrc/image/icon/fatcow/arrow_branch.png', 'type' => 'png', ), '/rsrc/image/icon/fatcow/arrow_merge.png' => array( 'hash' => 'c4bd97f3b1257439e2123ef69d2194d0', 'uri' => '/res/c4bd97f3/rsrc/image/icon/fatcow/arrow_merge.png', 'disk' => '/rsrc/image/icon/fatcow/arrow_merge.png', 'type' => 'png', ), '/rsrc/image/icon/fatcow/bullet_black.png' => array( 'hash' => 'c148284c84aa02ba1190dcf7e31c8985', 'uri' => '/res/c148284c/rsrc/image/icon/fatcow/bullet_black.png', 'disk' => '/rsrc/image/icon/fatcow/bullet_black.png', 'type' => 'png', ), '/rsrc/image/icon/fatcow/bullet_orange.png' => array( 'hash' => '397bd1c948d9aaac5e440a9270c3697a', 'uri' => '/res/397bd1c9/rsrc/image/icon/fatcow/bullet_orange.png', 'disk' => '/rsrc/image/icon/fatcow/bullet_orange.png', 'type' => 'png', ), '/rsrc/image/icon/fatcow/bullet_red.png' => array( 'hash' => '470e3b2c2ca84ebdd476271b681f421b', 'uri' => '/res/470e3b2c/rsrc/image/icon/fatcow/bullet_red.png', 'disk' => '/rsrc/image/icon/fatcow/bullet_red.png', 'type' => 'png', ), '/rsrc/image/icon/fatcow/calendar_edit.png' => array( 'hash' => 'de249c0f4f37bf5b2c69ff39ec5573fb', 'uri' => '/res/de249c0f/rsrc/image/icon/fatcow/calendar_edit.png', 'disk' => '/rsrc/image/icon/fatcow/calendar_edit.png', 'type' => 'png', ), '/rsrc/image/icon/fatcow/document_black.png' => array( 'hash' => '44d65a7f05a9c921719deedc160d68f7', 'uri' => '/res/44d65a7f/rsrc/image/icon/fatcow/document_black.png', 'disk' => '/rsrc/image/icon/fatcow/document_black.png', 'type' => 'png', ), '/rsrc/image/icon/fatcow/flag_blue.png' => array( 'hash' => '75a080492f900fbe489e4b27e403962b', 'uri' => '/res/75a08049/rsrc/image/icon/fatcow/flag_blue.png', 'disk' => '/rsrc/image/icon/fatcow/flag_blue.png', 'type' => 'png', ), '/rsrc/image/icon/fatcow/flag_finish.png' => array( 'hash' => '4af11fc7fab8e4610cbc3c88a02d4f78', 'uri' => '/res/4af11fc7/rsrc/image/icon/fatcow/flag_finish.png', 'disk' => '/rsrc/image/icon/fatcow/flag_finish.png', 'type' => 'png', ), '/rsrc/image/icon/fatcow/flag_ghost.png' => array( 'hash' => '14c9f30a37b43f276f27a27a924bf02d', 'uri' => '/res/14c9f30a/rsrc/image/icon/fatcow/flag_ghost.png', 'disk' => '/rsrc/image/icon/fatcow/flag_ghost.png', 'type' => 'png', ), '/rsrc/image/icon/fatcow/flag_green.png' => array( 'hash' => 'fed01374cd396cb774872762dcc447e1', 'uri' => '/res/fed01374/rsrc/image/icon/fatcow/flag_green.png', 'disk' => '/rsrc/image/icon/fatcow/flag_green.png', 'type' => 'png', ), '/rsrc/image/icon/fatcow/flag_orange.png' => array( 'hash' => '88008cb8bb99761a37e5a743e2455aeb', 'uri' => '/res/88008cb8/rsrc/image/icon/fatcow/flag_orange.png', 'disk' => '/rsrc/image/icon/fatcow/flag_orange.png', 'type' => 'png', ), '/rsrc/image/icon/fatcow/flag_pink.png' => array( 'hash' => '2f199f06ffc3dfc81b7561a057e0bc33', 'uri' => '/res/2f199f06/rsrc/image/icon/fatcow/flag_pink.png', 'disk' => '/rsrc/image/icon/fatcow/flag_pink.png', 'type' => 'png', ), '/rsrc/image/icon/fatcow/flag_purple.png' => array( 'hash' => '16358629dc86c39550b575586eb5df80', 'uri' => '/res/16358629/rsrc/image/icon/fatcow/flag_purple.png', 'disk' => '/rsrc/image/icon/fatcow/flag_purple.png', 'type' => 'png', ), '/rsrc/image/icon/fatcow/flag_red.png' => array( 'hash' => '210c28b4d93c439a499f5814f5e05772', 'uri' => '/res/210c28b4/rsrc/image/icon/fatcow/flag_red.png', 'disk' => '/rsrc/image/icon/fatcow/flag_red.png', 'type' => 'png', ), '/rsrc/image/icon/fatcow/flag_yellow.png' => array( 'hash' => 'bdfd73744a80bb80329ae50bc8a5f962', 'uri' => '/res/bdfd7374/rsrc/image/icon/fatcow/flag_yellow.png', 'disk' => '/rsrc/image/icon/fatcow/flag_yellow.png', 'type' => 'png', ), '/rsrc/image/icon/fatcow/folder.png' => array( 'hash' => '25e46cf9d210dde2242332296f79938c', 'uri' => '/res/25e46cf9/rsrc/image/icon/fatcow/folder.png', 'disk' => '/rsrc/image/icon/fatcow/folder.png', 'type' => 'png', ), '/rsrc/image/icon/fatcow/folder_go.png' => array( 'hash' => 'ba922ff7959309f51a14cb7ed5124d8b', 'uri' => '/res/ba922ff7/rsrc/image/icon/fatcow/folder_go.png', 'disk' => '/rsrc/image/icon/fatcow/folder_go.png', 'type' => 'png', ), '/rsrc/image/icon/fatcow/key_question.png' => array( 'hash' => '530a6448a4b91edec091a9292ccfd3d9', 'uri' => '/res/530a6448/rsrc/image/icon/fatcow/key_question.png', 'disk' => '/rsrc/image/icon/fatcow/key_question.png', 'type' => 'png', ), '/rsrc/image/icon/fatcow/link.png' => array( 'hash' => 'be1bea49b216548433014f3324902928', 'uri' => '/res/be1bea49/rsrc/image/icon/fatcow/link.png', 'disk' => '/rsrc/image/icon/fatcow/link.png', 'type' => 'png', ), '/rsrc/image/icon/fatcow/page_white_edit.png' => array( 'hash' => 'e7b7e7f2d9730bc80bc5c9eac1f3e36d', 'uri' => '/res/e7b7e7f2/rsrc/image/icon/fatcow/page_white_edit.png', 'disk' => '/rsrc/image/icon/fatcow/page_white_edit.png', 'type' => 'png', ), '/rsrc/image/icon/fatcow/page_white_link.png' => array( 'hash' => '1cfbad14412bda6c6f132dcc7c8725fd', 'uri' => '/res/1cfbad14/rsrc/image/icon/fatcow/page_white_link.png', 'disk' => '/rsrc/image/icon/fatcow/page_white_link.png', 'type' => 'png', ), '/rsrc/image/icon/fatcow/page_white_put.png' => array( 'hash' => 'bb7308aa5ac40137a8262da395a267fd', 'uri' => '/res/bb7308aa/rsrc/image/icon/fatcow/page_white_put.png', 'disk' => '/rsrc/image/icon/fatcow/page_white_put.png', 'type' => 'png', ), '/rsrc/image/icon/fatcow/page_white_text.png' => array( 'hash' => 'e47d590b626f617fb7d1d44e96e8fd11', 'uri' => '/res/e47d590b/rsrc/image/icon/fatcow/page_white_text.png', 'disk' => '/rsrc/image/icon/fatcow/page_white_text.png', 'type' => 'png', ), '/rsrc/image/icon/fatcow/source/conduit.png' => array( 'hash' => '1cae0656580aa3cd0b54b9d98306b1b9', 'uri' => '/res/1cae0656/rsrc/image/icon/fatcow/source/conduit.png', 'disk' => '/rsrc/image/icon/fatcow/source/conduit.png', 'type' => 'png', ), '/rsrc/image/icon/fatcow/source/email.png' => array( 'hash' => '93bdb3e168da1ed68f50c42125729d4e', 'uri' => '/res/93bdb3e1/rsrc/image/icon/fatcow/source/email.png', 'disk' => '/rsrc/image/icon/fatcow/source/email.png', 'type' => 'png', ), '/rsrc/image/icon/fatcow/source/fax.png' => array( 'hash' => 'd7dedf229841f2d041b347afd881596f', 'uri' => '/res/d7dedf22/rsrc/image/icon/fatcow/source/fax.png', 'disk' => '/rsrc/image/icon/fatcow/source/fax.png', 'type' => 'png', ), '/rsrc/image/icon/fatcow/source/mobile.png' => array( 'hash' => '786e7146d1e7d7318baf76c9d2baad97', 'uri' => '/res/786e7146/rsrc/image/icon/fatcow/source/mobile.png', 'disk' => '/rsrc/image/icon/fatcow/source/mobile.png', 'type' => 'png', ), '/rsrc/image/icon/fatcow/source/tablet.png' => array( 'hash' => '374cd40e4965be6b2fbdef4059d0ca05', 'uri' => '/res/374cd40e/rsrc/image/icon/fatcow/source/tablet.png', 'disk' => '/rsrc/image/icon/fatcow/source/tablet.png', 'type' => 'png', ), '/rsrc/image/icon/fatcow/source/web.png' => array( 'hash' => 'f4882a8f5619ba505ca033f72a340635', 'uri' => '/res/f4882a8f/rsrc/image/icon/fatcow/source/web.png', 'disk' => '/rsrc/image/icon/fatcow/source/web.png', 'type' => 'png', ), '/rsrc/image/icon/fatcow/thumbnails/default160x120.png' => array( 'hash' => '1b52ebd1fe0eee3ed0abfc382991b265', 'uri' => '/res/1b52ebd1/rsrc/image/icon/fatcow/thumbnails/default160x120.png', 'disk' => '/rsrc/image/icon/fatcow/thumbnails/default160x120.png', 'type' => 'png', ), '/rsrc/image/icon/fatcow/thumbnails/default60x45.png' => array( 'hash' => '048d851d8d1daad4754e891e734c1899', 'uri' => '/res/048d851d/rsrc/image/icon/fatcow/thumbnails/default60x45.png', 'disk' => '/rsrc/image/icon/fatcow/thumbnails/default60x45.png', 'type' => 'png', ), '/rsrc/image/icon/fatcow/thumbnails/image160x120.png' => array( 'hash' => '434acbd8dbbc2da9f09f6205a396eba1', 'uri' => '/res/434acbd8/rsrc/image/icon/fatcow/thumbnails/image160x120.png', 'disk' => '/rsrc/image/icon/fatcow/thumbnails/image160x120.png', 'type' => 'png', ), '/rsrc/image/icon/fatcow/thumbnails/image60x45.png' => array( 'hash' => '29f7872dc53588fe0b8f0b330c7ee23a', 'uri' => '/res/29f7872d/rsrc/image/icon/fatcow/thumbnails/image60x45.png', 'disk' => '/rsrc/image/icon/fatcow/thumbnails/image60x45.png', 'type' => 'png', ), '/rsrc/image/icon/fatcow/thumbnails/pdf160x120.png' => array( 'hash' => '39d2e22541658a3472ba41ae2fa548e5', 'uri' => '/res/39d2e225/rsrc/image/icon/fatcow/thumbnails/pdf160x120.png', 'disk' => '/rsrc/image/icon/fatcow/thumbnails/pdf160x120.png', 'type' => 'png', ), '/rsrc/image/icon/fatcow/thumbnails/pdf60x45.png' => array( 'hash' => 'b3572e9317cbed5184d12bdfabed2727', 'uri' => '/res/b3572e93/rsrc/image/icon/fatcow/thumbnails/pdf60x45.png', 'disk' => '/rsrc/image/icon/fatcow/thumbnails/pdf60x45.png', 'type' => 'png', ), '/rsrc/image/icon/fatcow/thumbnails/zip160x120.png' => array( 'hash' => 'e505108688a903b5cfb674707a289bcc', 'uri' => '/res/e5051086/rsrc/image/icon/fatcow/thumbnails/zip160x120.png', 'disk' => '/rsrc/image/icon/fatcow/thumbnails/zip160x120.png', 'type' => 'png', ), '/rsrc/image/icon/fatcow/thumbnails/zip60x45.png' => array( 'hash' => 'f00716f4e8f7a95e70d43504f06be0a6', 'uri' => '/res/f00716f4/rsrc/image/icon/fatcow/thumbnails/zip60x45.png', 'disk' => '/rsrc/image/icon/fatcow/thumbnails/zip60x45.png', 'type' => 'png', ), '/rsrc/image/icon/lightbox/close-2.png' => array( 'hash' => '72ff3ddcc1ed5d19a715ed6242114b53', 'uri' => '/res/72ff3ddc/rsrc/image/icon/lightbox/close-2.png', 'disk' => '/rsrc/image/icon/lightbox/close-2.png', 'type' => 'png', ), '/rsrc/image/icon/lightbox/close-hover-2.png' => array( 'hash' => '6ad4bd4a7820547a1d9041752546ba16', 'uri' => '/res/6ad4bd4a/rsrc/image/icon/lightbox/close-hover-2.png', 'disk' => '/rsrc/image/icon/lightbox/close-hover-2.png', 'type' => 'png', ), '/rsrc/image/icon/lightbox/left-arrow-2.png' => array( 'hash' => 'd84cbb0d42739f87b8f25b2f1d2f1153', 'uri' => '/res/d84cbb0d/rsrc/image/icon/lightbox/left-arrow-2.png', 'disk' => '/rsrc/image/icon/lightbox/left-arrow-2.png', 'type' => 'png', ), '/rsrc/image/icon/lightbox/left-arrow-hover-2.png' => array( 'hash' => 'cdf05f98fff3f390cd8df0c89894a3e1', 'uri' => '/res/cdf05f98/rsrc/image/icon/lightbox/left-arrow-hover-2.png', 'disk' => '/rsrc/image/icon/lightbox/left-arrow-hover-2.png', 'type' => 'png', ), '/rsrc/image/icon/lightbox/right-arrow-2.png' => array( 'hash' => '52021038cb6995c71f62a804bc2d420d', 'uri' => '/res/52021038/rsrc/image/icon/lightbox/right-arrow-2.png', 'disk' => '/rsrc/image/icon/lightbox/right-arrow-2.png', 'type' => 'png', ), '/rsrc/image/icon/lightbox/right-arrow-hover-2.png' => array( 'hash' => '65d5756b7b9cfcdeb2eb197a9aa6bbd2', 'uri' => '/res/65d5756b/rsrc/image/icon/lightbox/right-arrow-hover-2.png', 'disk' => '/rsrc/image/icon/lightbox/right-arrow-hover-2.png', 'type' => 'png', ), '/rsrc/image/icon/subscribe.png' => array( 'hash' => '5f47a4b17de245af39a4e7a097e40623', 'uri' => '/res/5f47a4b1/rsrc/image/icon/subscribe.png', 'disk' => '/rsrc/image/icon/subscribe.png', 'type' => 'png', ), '/rsrc/image/icon/tango/attachment.png' => array( 'hash' => '776fed2de89803fd8a0ba4b9deede230', 'uri' => '/res/776fed2d/rsrc/image/icon/tango/attachment.png', 'disk' => '/rsrc/image/icon/tango/attachment.png', 'type' => 'png', ), '/rsrc/image/icon/tango/edit.png' => array( 'hash' => 'c0028d99dcf4e9559bbf3c88ce2d8a8d', 'uri' => '/res/c0028d99/rsrc/image/icon/tango/edit.png', 'disk' => '/rsrc/image/icon/tango/edit.png', 'type' => 'png', ), '/rsrc/image/icon/tango/go-down.png' => array( 'hash' => '96862812cbb0445573c264dc057b8300', 'uri' => '/res/96862812/rsrc/image/icon/tango/go-down.png', 'disk' => '/rsrc/image/icon/tango/go-down.png', 'type' => 'png', ), '/rsrc/image/icon/tango/log.png' => array( 'hash' => 'a6f72499bef279ff6807a7dbc5148f1e', 'uri' => '/res/a6f72499/rsrc/image/icon/tango/log.png', 'disk' => '/rsrc/image/icon/tango/log.png', 'type' => 'png', ), '/rsrc/image/icon/tango/upload.png' => array( 'hash' => '8c11b63d6d99db3d7159c5d9a94e3062', 'uri' => '/res/8c11b63d/rsrc/image/icon/tango/upload.png', 'disk' => '/rsrc/image/icon/tango/upload.png', 'type' => 'png', ), '/rsrc/image/icon/unsubscribe.png' => array( 'hash' => '29429ad65aa3af50b072b32087057361', 'uri' => '/res/29429ad6/rsrc/image/icon/unsubscribe.png', 'disk' => '/rsrc/image/icon/unsubscribe.png', 'type' => 'png', ), '/rsrc/image/loading.gif' => array( 'hash' => '664297671941142f37d8c89e717ff2ce', 'uri' => '/res/66429767/rsrc/image/loading.gif', 'disk' => '/rsrc/image/loading.gif', 'type' => 'gif', ), '/rsrc/image/loading/boating_24.gif' => array( 'hash' => '2cd349ded48d698ebe886ba97b2db0f7', 'uri' => '/res/2cd349de/rsrc/image/loading/boating_24.gif', 'disk' => '/rsrc/image/loading/boating_24.gif', 'type' => 'gif', ), '/rsrc/image/loading/compass_24.gif' => array( 'hash' => '726c1ed4bf23446e044d6b9d28250a07', 'uri' => '/res/726c1ed4/rsrc/image/loading/compass_24.gif', 'disk' => '/rsrc/image/loading/compass_24.gif', 'type' => 'gif', ), '/rsrc/image/loading/loading_24.gif' => array( 'hash' => 'd6dcc5e6111a44fb9a160fc27b19d85c', 'uri' => '/res/d6dcc5e6/rsrc/image/loading/loading_24.gif', 'disk' => '/rsrc/image/loading/loading_24.gif', 'type' => 'gif', ), '/rsrc/image/loading/loading_48.gif' => array( 'hash' => 'cb6fc6eb9c0a0efaf589978029080c58', 'uri' => '/res/cb6fc6eb/rsrc/image/loading/loading_48.gif', 'disk' => '/rsrc/image/loading/loading_48.gif', 'type' => 'gif', ), '/rsrc/image/loading/loading_d48.gif' => array( 'hash' => 'c5181f5e0ac8125ad9beda73fdf18e91', 'uri' => '/res/c5181f5e/rsrc/image/loading/loading_d48.gif', 'disk' => '/rsrc/image/loading/loading_d48.gif', 'type' => 'gif', ), '/rsrc/image/loading/loading_w24.gif' => array( 'hash' => '231857d68736e9bdda6bdbaaf924b8da', 'uri' => '/res/231857d6/rsrc/image/loading/loading_w24.gif', 'disk' => '/rsrc/image/loading/loading_w24.gif', 'type' => 'gif', ), '/rsrc/image/main_texture.png' => array( 'hash' => 'e34d8143384721be73ec9b7532a977ab', 'uri' => '/res/e34d8143/rsrc/image/main_texture.png', 'disk' => '/rsrc/image/main_texture.png', 'type' => 'png', ), '/rsrc/image/menu_texture.png' => array( 'hash' => 'ad020b1529b3a3b3480ca9de1d5f1e40', 'uri' => '/res/ad020b15/rsrc/image/menu_texture.png', 'disk' => '/rsrc/image/menu_texture.png', 'type' => 'png', ), '/rsrc/image/people/harding.png' => array( 'hash' => '818b035ace2c480aa8df7b7f11cef58b', 'uri' => '/res/818b035a/rsrc/image/people/harding.png', 'disk' => '/rsrc/image/people/harding.png', 'type' => 'png', ), '/rsrc/image/people/jefferson.png' => array( 'hash' => '55fe807ff02f9320e595fb59442e2038', 'uri' => '/res/55fe807f/rsrc/image/people/jefferson.png', 'disk' => '/rsrc/image/people/jefferson.png', 'type' => 'png', ), '/rsrc/image/people/lincoln.png' => array( 'hash' => '2363337947ab52fd5fda79e4a004e930', 'uri' => '/res/23633379/rsrc/image/people/lincoln.png', 'disk' => '/rsrc/image/people/lincoln.png', 'type' => 'png', ), '/rsrc/image/people/mckinley.png' => array( 'hash' => '0b7b05dd47c49a0874670e5e8200bba8', 'uri' => '/res/0b7b05dd/rsrc/image/people/mckinley.png', 'disk' => '/rsrc/image/people/mckinley.png', 'type' => 'png', ), '/rsrc/image/people/taft.png' => array( 'hash' => 'f3e47d45b59b0b009fd536dabae9a151', 'uri' => '/res/f3e47d45/rsrc/image/people/taft.png', 'disk' => '/rsrc/image/people/taft.png', 'type' => 'png', ), '/rsrc/image/people/washington.png' => array( 'hash' => '01412761cab769f7993d69eba986d949', 'uri' => '/res/01412761/rsrc/image/people/washington.png', 'disk' => '/rsrc/image/people/washington.png', 'type' => 'png', ), '/rsrc/image/phrequent_active.png' => array( 'hash' => '716cddc08630eaa33934b2008723cac0', 'uri' => '/res/716cddc0/rsrc/image/phrequent_active.png', 'disk' => '/rsrc/image/phrequent_active.png', 'type' => 'png', ), '/rsrc/image/phrequent_inactive.png' => array( 'hash' => 'f9099683873c01c5de1dc6650bd668fe', 'uri' => '/res/f9099683/rsrc/image/phrequent_inactive.png', 'disk' => '/rsrc/image/phrequent_inactive.png', 'type' => 'png', ), '/rsrc/image/search.png' => array( 'hash' => 'ff7da044e6f923b8f569dec11f97e5e5', 'uri' => '/res/ff7da044/rsrc/image/search.png', 'disk' => '/rsrc/image/search.png', 'type' => 'png', ), '/rsrc/image/sprite-actions-X2.png' => array( 'hash' => '06962a5e8bea98ba7418d1d6cabcd7dc', 'uri' => '/res/06962a5e/rsrc/image/sprite-actions-X2.png', 'disk' => '/rsrc/image/sprite-actions-X2.png', 'type' => 'png', ), '/rsrc/image/sprite-actions.png' => array( 'hash' => 'd5dda5fab1e61b00538c9a4fa1ee94c8', 'uri' => '/res/d5dda5fa/rsrc/image/sprite-actions.png', 'disk' => '/rsrc/image/sprite-actions.png', 'type' => 'png', ), '/rsrc/image/sprite-apps-X2.png' => array( 'hash' => 'c15f920572ee2acb51881039f53ab1cd', 'uri' => '/res/c15f9205/rsrc/image/sprite-apps-X2.png', 'disk' => '/rsrc/image/sprite-apps-X2.png', 'type' => 'png', ), '/rsrc/image/sprite-apps-large-X2.png' => array( 'hash' => '0d03d3aa517de750c2765f6d85af63fb', 'uri' => '/res/0d03d3aa/rsrc/image/sprite-apps-large-X2.png', 'disk' => '/rsrc/image/sprite-apps-large-X2.png', 'type' => 'png', ), '/rsrc/image/sprite-apps-large.png' => array( 'hash' => 'e7d84eb34053b30a9f73eddddb58adab', 'uri' => '/res/e7d84eb3/rsrc/image/sprite-apps-large.png', 'disk' => '/rsrc/image/sprite-apps-large.png', 'type' => 'png', ), '/rsrc/image/sprite-apps-xlarge.png' => array( 'hash' => '992d2c278b6a22c0fa874d457a252fbd', 'uri' => '/res/992d2c27/rsrc/image/sprite-apps-xlarge.png', 'disk' => '/rsrc/image/sprite-apps-xlarge.png', 'type' => 'png', ), '/rsrc/image/sprite-apps.png' => array( 'hash' => 'fd67e1346117ee95b1327a2b92472525', 'uri' => '/res/fd67e134/rsrc/image/sprite-apps.png', 'disk' => '/rsrc/image/sprite-apps.png', 'type' => 'png', ), '/rsrc/image/sprite-conpherence-X2.png' => array( 'hash' => '5e47868b00933a9afb6c844e464e6b23', 'uri' => '/res/5e47868b/rsrc/image/sprite-conpherence-X2.png', 'disk' => '/rsrc/image/sprite-conpherence-X2.png', 'type' => 'png', ), '/rsrc/image/sprite-conpherence.png' => array( 'hash' => 'ca51f1be25213262d68e626e4cab7f0f', 'uri' => '/res/ca51f1be/rsrc/image/sprite-conpherence.png', 'disk' => '/rsrc/image/sprite-conpherence.png', 'type' => 'png', ), '/rsrc/image/sprite-docs-X2.png' => array( 'hash' => '57d3286ce88133f3ec9240e35f6bb897', 'uri' => '/res/57d3286c/rsrc/image/sprite-docs-X2.png', 'disk' => '/rsrc/image/sprite-docs-X2.png', 'type' => 'png', ), '/rsrc/image/sprite-docs.png' => array( 'hash' => 'b2b089072d6eddd831402a77c02b5736', 'uri' => '/res/b2b08907/rsrc/image/sprite-docs.png', 'disk' => '/rsrc/image/sprite-docs.png', 'type' => 'png', ), '/rsrc/image/sprite-gradient.png' => array( 'hash' => '1f0306b0ca281b1e5b96de0096269f1d', 'uri' => '/res/1f0306b0/rsrc/image/sprite-gradient.png', 'disk' => '/rsrc/image/sprite-gradient.png', 'type' => 'png', ), '/rsrc/image/sprite-icons-X2.png' => array( 'hash' => '6e886f9bbfed380fe1e6ddd4abe5c01d', 'uri' => '/res/6e886f9b/rsrc/image/sprite-icons-X2.png', 'disk' => '/rsrc/image/sprite-icons-X2.png', 'type' => 'png', ), '/rsrc/image/sprite-icons.png' => array( 'hash' => 'd04e07621efe4fc287b432c3d9d01c6b', 'uri' => '/res/d04e0762/rsrc/image/sprite-icons.png', 'disk' => '/rsrc/image/sprite-icons.png', 'type' => 'png', ), '/rsrc/image/sprite-login-X2.png' => array( 'hash' => '7176335e4e1604f94eacdb1790660560', 'uri' => '/res/7176335e/rsrc/image/sprite-login-X2.png', 'disk' => '/rsrc/image/sprite-login-X2.png', 'type' => 'png', ), '/rsrc/image/sprite-login.png' => array( 'hash' => '7d3eee260ee0beb90c12e26fbc48fd9c', 'uri' => '/res/7d3eee26/rsrc/image/sprite-login.png', 'disk' => '/rsrc/image/sprite-login.png', 'type' => 'png', ), '/rsrc/image/sprite-menu-X2.png' => array( 'hash' => '63b649a6ccba7bf76bc9456dc5dfb12b', 'uri' => '/res/63b649a6/rsrc/image/sprite-menu-X2.png', 'disk' => '/rsrc/image/sprite-menu-X2.png', 'type' => 'png', ), '/rsrc/image/sprite-menu.png' => array( 'hash' => 'e0e16618691d2cffe64e9c57843828ff', 'uri' => '/res/e0e16618/rsrc/image/sprite-menu.png', 'disk' => '/rsrc/image/sprite-menu.png', 'type' => 'png', ), '/rsrc/image/sprite-minicons-X2.png' => array( 'hash' => 'c420c6462f7e50ca9941ccc5dd9e3dec', 'uri' => '/res/c420c646/rsrc/image/sprite-minicons-X2.png', 'disk' => '/rsrc/image/sprite-minicons-X2.png', 'type' => 'png', ), '/rsrc/image/sprite-minicons.png' => array( 'hash' => '168bb875933624b3080a1cc134e5b4ed', 'uri' => '/res/168bb875/rsrc/image/sprite-minicons.png', 'disk' => '/rsrc/image/sprite-minicons.png', 'type' => 'png', ), '/rsrc/image/sprite-payments.png' => array( 'hash' => '5ce73fb580609e7cda16832e3577b147', 'uri' => '/res/5ce73fb5/rsrc/image/sprite-payments.png', 'disk' => '/rsrc/image/sprite-payments.png', 'type' => 'png', ), '/rsrc/image/sprite-projects-X2.png' => array( 'hash' => '3bd29905e197068a75ace63880a2b6eb', 'uri' => '/res/3bd29905/rsrc/image/sprite-projects-X2.png', 'disk' => '/rsrc/image/sprite-projects-X2.png', 'type' => 'png', ), '/rsrc/image/sprite-projects.png' => array( 'hash' => 'd9ec3fa470e6523520726ef75b011a03', 'uri' => '/res/d9ec3fa4/rsrc/image/sprite-projects.png', 'disk' => '/rsrc/image/sprite-projects.png', 'type' => 'png', ), '/rsrc/image/sprite-status-X2.png' => array( 'hash' => '25c79d119ef91268d9d85f5515fd1b5a', 'uri' => '/res/25c79d11/rsrc/image/sprite-status-X2.png', 'disk' => '/rsrc/image/sprite-status-X2.png', 'type' => 'png', ), '/rsrc/image/sprite-status.png' => array( 'hash' => '0c5c2ec1d96f7c9720971919a934e0b8', 'uri' => '/res/0c5c2ec1/rsrc/image/sprite-status.png', 'disk' => '/rsrc/image/sprite-status.png', 'type' => 'png', ), '/rsrc/image/sprite-tokens.png' => array( 'hash' => '67c46fd75c885b76ecbfe46e71a476cc', 'uri' => '/res/67c46fd7/rsrc/image/sprite-tokens.png', 'disk' => '/rsrc/image/sprite-tokens.png', 'type' => 'png', ), '/rsrc/image/texture/card-gradient.png' => array( 'hash' => '268b7fdd758d4bf99db8de6770aae8af', 'uri' => '/res/268b7fdd/rsrc/image/texture/card-gradient.png', 'disk' => '/rsrc/image/texture/card-gradient.png', 'type' => 'png', ), '/rsrc/image/texture/dark-menu-hover.png' => array( 'hash' => 'a214a732644be34872e895b338b5d639', 'uri' => '/res/a214a732/rsrc/image/texture/dark-menu-hover.png', 'disk' => '/rsrc/image/texture/dark-menu-hover.png', 'type' => 'png', ), '/rsrc/image/texture/dark-menu.png' => array( 'hash' => '41ee673a762cec48a154b456ad5ac204', 'uri' => '/res/41ee673a/rsrc/image/texture/dark-menu.png', 'disk' => '/rsrc/image/texture/dark-menu.png', 'type' => 'png', ), '/rsrc/image/texture/grip.png' => array( 'hash' => 'f11bc231d241f1335cfca2933ad234e0', 'uri' => '/res/f11bc231/rsrc/image/texture/grip.png', 'disk' => '/rsrc/image/texture/grip.png', 'type' => 'png', ), '/rsrc/image/texture/panel-header-gradient.png' => array( 'hash' => 'ad9204dd3ef5b12b645d80677d8ccead', 'uri' => '/res/ad9204dd/rsrc/image/texture/panel-header-gradient.png', 'disk' => '/rsrc/image/texture/panel-header-gradient.png', 'type' => 'png', ), '/rsrc/image/texture/phlnx-bg.png' => array( 'hash' => 'a55a694da8b3874ca7a3105b7818f3a0', 'uri' => '/res/a55a694d/rsrc/image/texture/phlnx-bg.png', 'disk' => '/rsrc/image/texture/phlnx-bg.png', 'type' => 'png', ), '/rsrc/image/texture/pholio-background.gif' => array( 'hash' => 'cf4561af116edf393dc583e5119fb412', 'uri' => '/res/cf4561af/rsrc/image/texture/pholio-background.gif', 'disk' => '/rsrc/image/texture/pholio-background.gif', 'type' => 'gif', ), '/rsrc/image/texture/table_header.png' => array( 'hash' => '4ed3f56a30d3749e8f62052b9735a316', 'uri' => '/res/4ed3f56a/rsrc/image/texture/table_header.png', 'disk' => '/rsrc/image/texture/table_header.png', 'type' => 'png', ), '/rsrc/image/texture/table_header_hover.png' => array( 'hash' => 'ea1f71a604e9b4859de1e25751540437', 'uri' => '/res/ea1f71a6/rsrc/image/texture/table_header_hover.png', 'disk' => '/rsrc/image/texture/table_header_hover.png', 'type' => 'png', ), '/rsrc/image/texture/table_header_tall.png' => array( 'hash' => 'b05525601f78d759f1c5e47fd9c1a8aa', 'uri' => '/res/b0552560/rsrc/image/texture/table_header_tall.png', 'disk' => '/rsrc/image/texture/table_header_tall.png', 'type' => 'png', ), '/rsrc/swf/aphlict.swf' => array( 'hash' => '4b9a9d83bebaf254f3790e87b45c1f92', 'uri' => '/res/4b9a9d83/rsrc/swf/aphlict.swf', 'disk' => '/rsrc/swf/aphlict.swf', 'type' => 'swf', ), 'aphront-bars' => array( 'uri' => '/res/dc8fd846/rsrc/css/aphront/aphront-bars.css', 'type' => 'css', 'requires' => array( ), 'disk' => '/rsrc/css/aphront/aphront-bars.css', ), 'aphront-calendar-view-css' => array( 'uri' => '/res/d5a33deb/rsrc/css/aphront/calendar-view.css', 'type' => 'css', 'requires' => array( ), 'disk' => '/rsrc/css/aphront/calendar-view.css', ), 'aphront-contextbar-view-css' => array( 'uri' => '/res/46c6248f/rsrc/css/aphront/context-bar.css', 'type' => 'css', 'requires' => array( ), 'disk' => '/rsrc/css/aphront/context-bar.css', ), 'aphront-dark-console-css' => array( 'uri' => '/res/5c341863/rsrc/css/aphront/dark-console.css', 'type' => 'css', 'requires' => array( ), 'disk' => '/rsrc/css/aphront/dark-console.css', ), 'aphront-dialog-view-css' => array( 'uri' => '/res/830fa2de/rsrc/css/aphront/dialog-view.css', 'type' => 'css', 'requires' => array( ), 'disk' => '/rsrc/css/aphront/dialog-view.css', ), 'aphront-error-view-css' => array( 'uri' => '/res/07a74e07/rsrc/css/aphront/error-view.css', 'type' => 'css', 'requires' => array( ), 'disk' => '/rsrc/css/aphront/error-view.css', ), 'aphront-list-filter-view-css' => array( 'uri' => '/res/b770e0da/rsrc/css/aphront/list-filter-view.css', 'type' => 'css', 'requires' => array( ), 'disk' => '/rsrc/css/aphront/list-filter-view.css', ), 'aphront-multi-column-view-css' => array( 'uri' => '/res/f7f25fb7/rsrc/css/aphront/multi-column.css', 'type' => 'css', 'requires' => array( ), 'disk' => '/rsrc/css/aphront/multi-column.css', ), 'aphront-notes' => array( 'uri' => '/res/ac115367/rsrc/css/aphront/aphront-notes.css', 'type' => 'css', 'requires' => array( ), 'disk' => '/rsrc/css/aphront/aphront-notes.css', ), 'aphront-pager-view-css' => array( 'uri' => '/res/ea81aec0/rsrc/css/aphront/pager-view.css', 'type' => 'css', 'requires' => array( ), 'disk' => '/rsrc/css/aphront/pager-view.css', ), 'aphront-panel-view-css' => array( 'uri' => '/res/70d7011b/rsrc/css/aphront/panel-view.css', 'type' => 'css', 'requires' => array( ), 'disk' => '/rsrc/css/aphront/panel-view.css', ), 'aphront-request-failure-view-css' => array( 'uri' => '/res/c9a43002/rsrc/css/aphront/request-failure-view.css', 'type' => 'css', 'requires' => array( ), 'disk' => '/rsrc/css/aphront/request-failure-view.css', ), 'aphront-table-view-css' => array( 'uri' => '/res/24f51f0b/rsrc/css/aphront/table-view.css', 'type' => 'css', 'requires' => array( ), 'disk' => '/rsrc/css/aphront/table-view.css', ), 'aphront-tokenizer-control-css' => array( 'uri' => '/res/36192cf2/rsrc/css/aphront/tokenizer.css', 'type' => 'css', 'requires' => array( 0 => 'aphront-typeahead-control-css', ), 'disk' => '/rsrc/css/aphront/tokenizer.css', ), 'aphront-tooltip-css' => array( 'uri' => '/res/3a7d8e07/rsrc/css/aphront/tooltip.css', 'type' => 'css', 'requires' => array( ), 'disk' => '/rsrc/css/aphront/tooltip.css', ), 'aphront-two-column-view-css' => array( 'uri' => '/res/4263aa98/rsrc/css/aphront/two-column.css', 'type' => 'css', 'requires' => array( ), 'disk' => '/rsrc/css/aphront/two-column.css', ), 'aphront-typeahead-control-css' => array( 'uri' => '/res/c6ad64bb/rsrc/css/aphront/typeahead.css', 'type' => 'css', 'requires' => array( ), 'disk' => '/rsrc/css/aphront/typeahead.css', ), 'auth-css' => array( 'uri' => '/res/9e544d3c/rsrc/css/application/auth/auth.css', 'type' => 'css', 'requires' => array( ), 'disk' => '/rsrc/css/application/auth/auth.css', ), 'config-options-css' => array( 'uri' => '/res/4b5b6779/rsrc/css/application/config/config-options.css', 'type' => 'css', 'requires' => array( ), 'disk' => '/rsrc/css/application/config/config-options.css', ), 'conpherence-menu-css' => array( 'uri' => '/res/cae40b18/rsrc/css/application/conpherence/menu.css', 'type' => 'css', 'requires' => array( ), 'disk' => '/rsrc/css/application/conpherence/menu.css', ), 'conpherence-message-pane-css' => array( 'uri' => '/res/150f96d4/rsrc/css/application/conpherence/message-pane.css', 'type' => 'css', 'requires' => array( ), 'disk' => '/rsrc/css/application/conpherence/message-pane.css', ), 'conpherence-notification-css' => array( 'uri' => '/res/232c8cdb/rsrc/css/application/conpherence/notification.css', 'type' => 'css', 'requires' => array( ), 'disk' => '/rsrc/css/application/conpherence/notification.css', ), 'conpherence-update-css' => array( 'uri' => '/res/92094ed7/rsrc/css/application/conpherence/update.css', 'type' => 'css', 'requires' => array( ), 'disk' => '/rsrc/css/application/conpherence/update.css', ), 'conpherence-widget-pane-css' => array( 'uri' => '/res/13478b94/rsrc/css/application/conpherence/widget-pane.css', 'type' => 'css', 'requires' => array( ), 'disk' => '/rsrc/css/application/conpherence/widget-pane.css', ), 'differential-changeset-view-css' => array( 'uri' => '/res/37f702ae/rsrc/css/application/differential/changeset-view.css', 'type' => 'css', 'requires' => array( ), 'disk' => '/rsrc/css/application/differential/changeset-view.css', ), 'differential-core-view-css' => array( 'uri' => '/res/18563185/rsrc/css/application/differential/core.css', 'type' => 'css', 'requires' => array( ), 'disk' => '/rsrc/css/application/differential/core.css', ), 'differential-inline-comment-editor' => array( 'uri' => '/res/e952d210/rsrc/js/application/differential/DifferentialInlineCommentEditor.js', 'type' => 'js', 'requires' => array( 0 => 'javelin-dom', 1 => 'javelin-util', 2 => 'javelin-stratcom', 3 => 'javelin-install', 4 => 'javelin-request', 5 => 'javelin-workflow', ), 'disk' => '/rsrc/js/application/differential/DifferentialInlineCommentEditor.js', ), 'differential-local-commits-view-css' => array( 'uri' => '/res/c6e9db42/rsrc/css/application/differential/local-commits-view.css', 'type' => 'css', 'requires' => array( ), 'disk' => '/rsrc/css/application/differential/local-commits-view.css', ), 'differential-results-table-css' => array( 'uri' => '/res/5e37cf75/rsrc/css/application/differential/results-table.css', 'type' => 'css', 'requires' => array( ), 'disk' => '/rsrc/css/application/differential/results-table.css', ), 'differential-revision-add-comment-css' => array( 'uri' => '/res/849748d3/rsrc/css/application/differential/add-comment.css', 'type' => 'css', 'requires' => array( ), 'disk' => '/rsrc/css/application/differential/add-comment.css', ), 'differential-revision-comment-css' => array( 'uri' => '/res/dc80fe37/rsrc/css/application/differential/revision-comment.css', 'type' => 'css', 'requires' => array( ), 'disk' => '/rsrc/css/application/differential/revision-comment.css', ), 'differential-revision-comment-list-css' => array( 'uri' => '/res/034e1948/rsrc/css/application/differential/revision-comment-list.css', 'type' => 'css', 'requires' => array( ), 'disk' => '/rsrc/css/application/differential/revision-comment-list.css', ), 'differential-revision-history-css' => array( 'uri' => '/res/13b4c17b/rsrc/css/application/differential/revision-history.css', 'type' => 'css', 'requires' => array( ), 'disk' => '/rsrc/css/application/differential/revision-history.css', ), 'differential-revision-list-css' => array( 'uri' => '/res/fe6c4721/rsrc/css/application/differential/revision-list.css', 'type' => 'css', 'requires' => array( ), 'disk' => '/rsrc/css/application/differential/revision-list.css', ), 'differential-table-of-contents-css' => array( 'uri' => '/res/3bb8c01f/rsrc/css/application/differential/table-of-contents.css', 'type' => 'css', 'requires' => array( ), 'disk' => '/rsrc/css/application/differential/table-of-contents.css', ), 'diffusion-commit-view-css' => array( 'uri' => '/res/a48ea65a/rsrc/css/application/diffusion/commit-view.css', 'type' => 'css', 'requires' => array( ), 'disk' => '/rsrc/css/application/diffusion/commit-view.css', ), 'diffusion-icons-css' => array( 'uri' => '/res/b93e32c9/rsrc/css/application/diffusion/diffusion-icons.css', 'type' => 'css', 'requires' => array( ), 'disk' => '/rsrc/css/application/diffusion/diffusion-icons.css', ), 'diffusion-source-css' => array( 'uri' => '/res/f4a2f867/rsrc/css/application/diffusion/diffusion-source.css', 'type' => 'css', 'requires' => array( ), 'disk' => '/rsrc/css/application/diffusion/diffusion-source.css', ), 'diviner-shared-css' => array( 'uri' => '/res/2e831eea/rsrc/css/diviner/diviner-shared.css', 'type' => 'css', 'requires' => array( ), 'disk' => '/rsrc/css/diviner/diviner-shared.css', ), 'global-drag-and-drop-css' => array( 'uri' => '/res/4e24cb65/rsrc/css/application/files/global-drag-and-drop.css', 'type' => 'css', 'requires' => array( ), 'disk' => '/rsrc/css/application/files/global-drag-and-drop.css', ), 'herald-css' => array( 'uri' => '/res/2150a55d/rsrc/css/application/herald/herald.css', 'type' => 'css', 'requires' => array( ), 'disk' => '/rsrc/css/application/herald/herald.css', ), 'herald-rule-editor' => array( 'uri' => '/res/a561eb19/rsrc/js/application/herald/HeraldRuleEditor.js', 'type' => 'js', 'requires' => array( 0 => 'multirow-row-manager', 1 => 'javelin-install', 2 => 'javelin-typeahead', 3 => 'javelin-util', 4 => 'javelin-dom', 5 => 'javelin-tokenizer', 6 => 'javelin-typeahead-preloaded-source', 7 => 'javelin-stratcom', 8 => 'javelin-json', 9 => 'phabricator-prefab', ), 'disk' => '/rsrc/js/application/herald/HeraldRuleEditor.js', ), 'herald-test-css' => array( 'uri' => '/res/51199954/rsrc/css/application/herald/herald-test.css', 'type' => 'css', 'requires' => array( ), 'disk' => '/rsrc/css/application/herald/herald-test.css', ), 'inline-comment-summary-css' => array( 'uri' => '/res/3cf1f7a7/rsrc/css/application/diff/inline-comment-summary.css', 'type' => 'css', 'requires' => array( ), 'disk' => '/rsrc/css/application/diff/inline-comment-summary.css', ), 'javelin-aphlict' => array( 'uri' => '/res/c0b9e53f/rsrc/js/application/aphlict/Aphlict.js', 'type' => 'js', 'requires' => array( 0 => 'javelin-install', 1 => 'javelin-util', ), 'disk' => '/rsrc/js/application/aphlict/Aphlict.js', ), 'javelin-behavior' => array( 'uri' => '/res/15482715/rsrc/externals/javelin/lib/behavior.js', 'type' => 'js', 'requires' => array( 0 => 'javelin-magical-init', 1 => 'javelin-util', ), 'disk' => '/rsrc/externals/javelin/lib/behavior.js', ), 'javelin-behavior-aphlict-dropdown' => array( 'uri' => '/res/3ff0c90a/rsrc/js/application/aphlict/behavior-aphlict-dropdown.js', 'type' => 'js', 'requires' => array( 0 => 'javelin-behavior', 1 => 'javelin-request', 2 => 'javelin-stratcom', 3 => 'javelin-vector', 4 => 'javelin-dom', 5 => 'javelin-uri', ), 'disk' => '/rsrc/js/application/aphlict/behavior-aphlict-dropdown.js', ), 'javelin-behavior-aphlict-listen' => array( 'uri' => '/res/7487f207/rsrc/js/application/aphlict/behavior-aphlict-listen.js', 'type' => 'js', 'requires' => array( 0 => 'javelin-behavior', 1 => 'javelin-aphlict', 2 => 'javelin-stratcom', 3 => 'javelin-request', 4 => 'javelin-uri', 5 => 'javelin-dom', 6 => 'javelin-json', 7 => 'phabricator-notification', ), 'disk' => '/rsrc/js/application/aphlict/behavior-aphlict-listen.js', ), 'javelin-behavior-aphront-basic-tokenizer' => array( 'uri' => '/res/c7fd9a7b/rsrc/js/core/behavior-tokenizer.js', 'type' => 'js', 'requires' => array( 0 => 'javelin-behavior', 1 => 'phabricator-prefab', ), 'disk' => '/rsrc/js/core/behavior-tokenizer.js', ), 'javelin-behavior-aphront-crop' => array( 'uri' => '/res/8c800f36/rsrc/js/core/behavior-crop.js', 'type' => 'js', 'requires' => array( 0 => 'javelin-behavior', 1 => 'javelin-dom', 2 => 'javelin-vector', 3 => 'javelin-magical-init', ), 'disk' => '/rsrc/js/core/behavior-crop.js', ), 'javelin-behavior-aphront-drag-and-drop-textarea' => array( 'uri' => '/res/a261f6e6/rsrc/js/core/behavior-drag-and-drop-textarea.js', 'type' => 'js', 'requires' => array( 0 => 'javelin-behavior', 1 => 'javelin-dom', 2 => 'phabricator-drag-and-drop-file-upload', 3 => 'phabricator-textareautils', ), 'disk' => '/rsrc/js/core/behavior-drag-and-drop-textarea.js', ), 'javelin-behavior-aphront-form-disable-on-submit' => array( 'uri' => '/res/a4a4ff07/rsrc/js/core/behavior-form.js', 'type' => 'js', 'requires' => array( 0 => 'javelin-behavior', 1 => 'javelin-stratcom', 2 => 'javelin-dom', ), 'disk' => '/rsrc/js/core/behavior-form.js', ), 'javelin-behavior-aphront-more' => array( 'uri' => '/res/fae13324/rsrc/js/core/behavior-more.js', 'type' => 'js', 'requires' => array( 0 => 'javelin-behavior', 1 => 'javelin-stratcom', 2 => 'javelin-dom', ), 'disk' => '/rsrc/js/core/behavior-more.js', ), 'javelin-behavior-audio-source' => array( 'uri' => '/res/21831141/rsrc/js/core/behavior-audio-source.js', 'type' => 'js', 'requires' => array( 0 => 'javelin-behavior', 1 => 'javelin-stratcom', 2 => 'javelin-vector', 3 => 'javelin-dom', ), 'disk' => '/rsrc/js/core/behavior-audio-source.js', ), 'javelin-behavior-audit-preview' => array( 'uri' => '/res/d8f31e46/rsrc/js/application/diffusion/behavior-audit-preview.js', 'type' => 'js', 'requires' => array( 0 => 'javelin-behavior', 1 => 'javelin-dom', 2 => 'javelin-util', 3 => 'phabricator-shaped-request', ), 'disk' => '/rsrc/js/application/diffusion/behavior-audit-preview.js', ), 'javelin-behavior-balanced-payment-form' => array( 'uri' => '/res/6876492d/rsrc/js/application/phortune/behavior-balanced-payment-form.js', 'type' => 'js', 'requires' => array( 0 => 'javelin-behavior', 1 => 'javelin-dom', 2 => 'phortune-credit-card-form', ), 'disk' => '/rsrc/js/application/phortune/behavior-balanced-payment-form.js', ), 'javelin-behavior-config-reorder-fields' => array( 'uri' => '/res/691c5c8c/rsrc/js/application/config/behavior-reorder-fields.js', 'type' => 'js', 'requires' => array( 0 => 'javelin-behavior', 1 => 'javelin-stratcom', 2 => 'javelin-dom', 3 => 'javelin-json', 4 => 'phabricator-draggable-list', ), 'disk' => '/rsrc/js/application/config/behavior-reorder-fields.js', ), 'javelin-behavior-conpherence-menu' => array( 'uri' => '/res/f27205d4/rsrc/js/application/conpherence/behavior-menu.js', 'type' => 'js', 'requires' => array( 0 => 'javelin-behavior', 1 => 'javelin-dom', 2 => 'javelin-util', 3 => 'javelin-stratcom', 4 => 'javelin-workflow', 5 => 'javelin-behavior-device', 6 => 'javelin-history', 7 => 'javelin-vector', ), 'disk' => '/rsrc/js/application/conpherence/behavior-menu.js', ), 'javelin-behavior-conpherence-pontificate' => array( 'uri' => '/res/19cb581b/rsrc/js/application/conpherence/behavior-pontificate.js', 'type' => 'js', 'requires' => array( 0 => 'javelin-behavior', 1 => 'javelin-dom', 2 => 'javelin-util', 3 => 'javelin-workflow', 4 => 'javelin-stratcom', ), 'disk' => '/rsrc/js/application/conpherence/behavior-pontificate.js', ), 'javelin-behavior-conpherence-widget-pane' => array( 'uri' => '/res/562ca20e/rsrc/js/application/conpherence/behavior-widget-pane.js', 'type' => 'js', 'requires' => array( 0 => 'javelin-behavior', 1 => 'javelin-dom', 2 => 'javelin-stratcom', 3 => 'javelin-workflow', 4 => 'javelin-util', 5 => 'phabricator-notification', 6 => 'javelin-behavior-device', 7 => 'phabricator-dropdown-menu', 8 => 'phabricator-menu-item', ), 'disk' => '/rsrc/js/application/conpherence/behavior-widget-pane.js', ), 'javelin-behavior-countdown-timer' => array( 'uri' => '/res/13d40efa/rsrc/js/application/countdown/timer.js', 'type' => 'js', 'requires' => array( 0 => 'javelin-behavior', 1 => 'javelin-dom', ), 'disk' => '/rsrc/js/application/countdown/timer.js', ), 'javelin-behavior-dark-console' => array( 'uri' => '/res/1e2c7a5e/rsrc/js/core/behavior-dark-console.js', 'type' => 'js', 'requires' => array( 0 => 'javelin-behavior', 1 => 'javelin-stratcom', 2 => 'javelin-util', 3 => 'javelin-dom', 4 => 'javelin-request', 5 => 'phabricator-keyboard-shortcut', ), 'disk' => '/rsrc/js/core/behavior-dark-console.js', ), 'javelin-behavior-device' => array( 'uri' => '/res/12e43f5a/rsrc/js/core/behavior-device.js', 'type' => 'js', 'requires' => array( 0 => 'javelin-behavior', 1 => 'javelin-stratcom', 2 => 'javelin-dom', 3 => 'javelin-vector', 4 => 'javelin-install', ), 'disk' => '/rsrc/js/core/behavior-device.js', ), 'javelin-behavior-differential-accept-with-errors' => array( 'uri' => '/res/8fea67b3/rsrc/js/application/differential/behavior-accept-with-errors.js', 'type' => 'js', 'requires' => array( 0 => 'javelin-behavior', 1 => 'javelin-dom', ), 'disk' => '/rsrc/js/application/differential/behavior-accept-with-errors.js', ), 'javelin-behavior-differential-add-reviewers-and-ccs' => array( 'uri' => '/res/fd9f2c1c/rsrc/js/application/differential/behavior-add-reviewers-and-ccs.js', 'type' => 'js', 'requires' => array( 0 => 'javelin-behavior', 1 => 'javelin-dom', 2 => 'phabricator-prefab', ), 'disk' => '/rsrc/js/application/differential/behavior-add-reviewers-and-ccs.js', ), 'javelin-behavior-differential-comment-jump' => array( 'uri' => '/res/8ffb4222/rsrc/js/application/differential/behavior-comment-jump.js', 'type' => 'js', 'requires' => array( 0 => 'javelin-behavior', 1 => 'javelin-stratcom', 2 => 'javelin-dom', ), 'disk' => '/rsrc/js/application/differential/behavior-comment-jump.js', ), 'javelin-behavior-differential-diff-radios' => array( 'uri' => '/res/004cb66f/rsrc/js/application/differential/behavior-diff-radios.js', 'type' => 'js', 'requires' => array( 0 => 'javelin-behavior', 1 => 'javelin-stratcom', 2 => 'javelin-dom', ), 'disk' => '/rsrc/js/application/differential/behavior-diff-radios.js', ), 'javelin-behavior-differential-dropdown-menus' => array( 'uri' => '/res/722c679c/rsrc/js/application/differential/behavior-dropdown-menus.js', 'type' => 'js', 'requires' => array( 0 => 'javelin-behavior', 1 => 'javelin-dom', 2 => 'javelin-util', 3 => 'javelin-stratcom', 4 => 'phabricator-dropdown-menu', 5 => 'phabricator-menu-item', 6 => 'phabricator-phtize', ), 'disk' => '/rsrc/js/application/differential/behavior-dropdown-menus.js', ), 'javelin-behavior-differential-edit-inline-comments' => array( 'uri' => '/res/935d4012/rsrc/js/application/differential/behavior-edit-inline-comments.js', 'type' => 'js', 'requires' => array( 0 => 'javelin-behavior', 1 => 'javelin-stratcom', 2 => 'javelin-dom', 3 => 'javelin-util', 4 => 'javelin-vector', 5 => 'differential-inline-comment-editor', ), 'disk' => '/rsrc/js/application/differential/behavior-edit-inline-comments.js', ), 'javelin-behavior-differential-feedback-preview' => array( 'uri' => '/res/4421fac6/rsrc/js/application/differential/behavior-comment-preview.js', 'type' => 'js', 'requires' => array( 0 => 'javelin-behavior', 1 => 'javelin-stratcom', 2 => 'javelin-dom', 3 => 'javelin-request', 4 => 'javelin-util', 5 => 'phabricator-shaped-request', ), 'disk' => '/rsrc/js/application/differential/behavior-comment-preview.js', ), 'javelin-behavior-differential-keyboard-navigation' => array( 'uri' => '/res/22ed93ba/rsrc/js/application/differential/behavior-keyboard-nav.js', 'type' => 'js', 'requires' => array( 0 => 'javelin-behavior', 1 => 'javelin-dom', 2 => 'javelin-stratcom', 3 => 'phabricator-keyboard-shortcut', ), 'disk' => '/rsrc/js/application/differential/behavior-keyboard-nav.js', ), 'javelin-behavior-differential-populate' => array( 'uri' => '/res/bb9a29f4/rsrc/js/application/differential/behavior-populate.js', 'type' => 'js', 'requires' => array( 0 => 'javelin-behavior', 1 => 'javelin-workflow', 2 => 'javelin-util', 3 => 'javelin-dom', 4 => 'javelin-stratcom', 5 => 'javelin-behavior-device', 6 => 'javelin-vector', 7 => 'phabricator-tooltip', ), 'disk' => '/rsrc/js/application/differential/behavior-populate.js', ), 'javelin-behavior-differential-show-all-comments' => array( 'uri' => '/res/8801848d/rsrc/js/application/differential/behavior-show-all-comments.js', 'type' => 'js', 'requires' => array( 0 => 'javelin-behavior', 1 => 'javelin-stratcom', 2 => 'javelin-dom', ), 'disk' => '/rsrc/js/application/differential/behavior-show-all-comments.js', ), 'javelin-behavior-differential-show-field-details' => array( 'uri' => '/res/8d57f459/rsrc/js/application/differential/behavior-show-field-details.js', 'type' => 'js', 'requires' => array( 0 => 'javelin-behavior', 1 => 'javelin-stratcom', 2 => 'javelin-dom', ), 'disk' => '/rsrc/js/application/differential/behavior-show-field-details.js', ), 'javelin-behavior-differential-show-more' => array( 'uri' => '/res/03b7bc9e/rsrc/js/application/differential/behavior-show-more.js', 'type' => 'js', 'requires' => array( 0 => 'javelin-behavior', 1 => 'javelin-dom', 2 => 'javelin-workflow', 3 => 'javelin-util', 4 => 'javelin-stratcom', ), 'disk' => '/rsrc/js/application/differential/behavior-show-more.js', ), 'javelin-behavior-differential-toggle-files' => array( 'uri' => '/res/beb89813/rsrc/js/application/differential/behavior-toggle-files.js', 'type' => 'js', 'requires' => array( 0 => 'javelin-behavior', 1 => 'javelin-dom', 2 => 'javelin-stratcom', 3 => 'phabricator-phtize', ), 'disk' => '/rsrc/js/application/differential/behavior-toggle-files.js', ), 'javelin-behavior-differential-user-select' => array( 'uri' => '/res/23c51a5d/rsrc/js/application/differential/behavior-user-select.js', 'type' => 'js', 'requires' => array( 0 => 'javelin-behavior', 1 => 'javelin-dom', 2 => 'javelin-stratcom', ), 'disk' => '/rsrc/js/application/differential/behavior-user-select.js', ), 'javelin-behavior-diffusion-commit-branches' => array( 'uri' => '/res/1ede335a/rsrc/js/application/diffusion/behavior-commit-branches.js', 'type' => 'js', 'requires' => array( 0 => 'javelin-behavior', 1 => 'javelin-dom', 2 => 'javelin-util', 3 => 'javelin-request', ), 'disk' => '/rsrc/js/application/diffusion/behavior-commit-branches.js', ), 'javelin-behavior-diffusion-commit-graph' => array( 'uri' => '/res/536b8483/rsrc/js/application/diffusion/behavior-commit-graph.js', 'type' => 'js', 'requires' => array( 0 => 'javelin-behavior', 1 => 'javelin-dom', 2 => 'javelin-stratcom', ), 'disk' => '/rsrc/js/application/diffusion/behavior-commit-graph.js', ), 'javelin-behavior-diffusion-jump-to' => array( 'uri' => '/res/bade44bd/rsrc/js/application/diffusion/behavior-jump-to.js', 'type' => 'js', 'requires' => array( 0 => 'javelin-behavior', 1 => 'javelin-vector', 2 => 'javelin-dom', ), 'disk' => '/rsrc/js/application/diffusion/behavior-jump-to.js', ), 'javelin-behavior-diffusion-pull-lastmodified' => array( 'uri' => '/res/29fe2790/rsrc/js/application/diffusion/behavior-pull-lastmodified.js', 'type' => 'js', 'requires' => array( 0 => 'javelin-behavior', 1 => 'javelin-dom', 2 => 'javelin-util', 3 => 'javelin-request', ), 'disk' => '/rsrc/js/application/diffusion/behavior-pull-lastmodified.js', ), 'javelin-behavior-doorkeeper-tag' => array( 'uri' => '/res/59480572/rsrc/js/application/doorkeeper/behavior-doorkeeper-tag.js', 'type' => 'js', 'requires' => array( 0 => 'javelin-behavior', 1 => 'javelin-dom', 2 => 'javelin-json', 3 => 'javelin-workflow', 4 => 'javelin-magical-init', ), 'disk' => '/rsrc/js/application/doorkeeper/behavior-doorkeeper-tag.js', ), 'javelin-behavior-error-log' => array( 'uri' => '/res/acefdea7/rsrc/js/core/behavior-error-log.js', 'type' => 'js', 'requires' => array( 0 => 'javelin-dom', ), 'disk' => '/rsrc/js/core/behavior-error-log.js', ), 'javelin-behavior-fancy-datepicker' => array( 'uri' => '/res/dcd7c2ca/rsrc/js/core/behavior-fancy-datepicker.js', 'type' => 'js', 'requires' => array( 0 => 'javelin-behavior', 1 => 'javelin-util', 2 => 'javelin-dom', 3 => 'javelin-stratcom', 4 => 'javelin-vector', ), 'disk' => '/rsrc/js/core/behavior-fancy-datepicker.js', ), 'javelin-behavior-global-drag-and-drop' => array( 'uri' => '/res/ee8e9c39/rsrc/js/core/behavior-global-drag-and-drop.js', 'type' => 'js', 'requires' => array( 0 => 'javelin-behavior', 1 => 'javelin-dom', 2 => 'javelin-uri', 3 => 'javelin-mask', 4 => 'phabricator-drag-and-drop-file-upload', ), 'disk' => '/rsrc/js/core/behavior-global-drag-and-drop.js', ), 'javelin-behavior-herald-rule-editor' => array( 'uri' => '/res/77a0c945/rsrc/js/application/herald/herald-rule-editor.js', 'type' => 'js', 'requires' => array( 0 => 'herald-rule-editor', 1 => 'javelin-behavior', ), 'disk' => '/rsrc/js/application/herald/herald-rule-editor.js', ), 'javelin-behavior-history-install' => array( 'uri' => '/res/9099a161/rsrc/js/core/behavior-history-install.js', 'type' => 'js', 'requires' => array( 0 => 'javelin-behavior', 1 => 'javelin-history', ), 'disk' => '/rsrc/js/core/behavior-history-install.js', ), 'javelin-behavior-icon-composer' => array( 'uri' => '/res/0be5c462/rsrc/js/application/files/behavior-icon-composer.js', 'type' => 'js', 'requires' => array( 0 => 'javelin-behavior', 1 => 'javelin-dom', 2 => 'javelin-stratcom', ), 'disk' => '/rsrc/js/application/files/behavior-icon-composer.js', ), 'javelin-behavior-konami' => array( 'uri' => '/res/b7bb7c24/rsrc/js/core/behavior-konami.js', 'type' => 'js', 'requires' => array( 0 => 'javelin-behavior', 1 => 'javelin-stratcom', ), 'disk' => '/rsrc/js/core/behavior-konami.js', ), 'javelin-behavior-launch-icon-composer' => array( 'uri' => '/res/202488ac/rsrc/js/application/files/behavior-launch-icon-composer.js', 'type' => 'js', 'requires' => array( 0 => 'javelin-behavior', 1 => 'javelin-dom', 2 => 'javelin-workflow', ), 'disk' => '/rsrc/js/application/files/behavior-launch-icon-composer.js', ), 'javelin-behavior-lightbox-attachments' => array( 'uri' => '/res/72b4d3a8/rsrc/js/core/behavior-lightbox-attachments.js', 'type' => 'js', 'requires' => array( 0 => 'javelin-behavior', 1 => 'javelin-stratcom', 2 => 'javelin-dom', 3 => 'javelin-mask', 4 => 'javelin-util', 5 => 'phabricator-busy', ), 'disk' => '/rsrc/js/core/behavior-lightbox-attachments.js', ), 'javelin-behavior-line-chart' => array( 'uri' => '/res/1aa5ac88/rsrc/js/application/maniphest/behavior-line-chart.js', 'type' => 'js', 'requires' => array( 0 => 'javelin-behavior', 1 => 'javelin-dom', 2 => 'javelin-vector', ), 'disk' => '/rsrc/js/application/maniphest/behavior-line-chart.js', ), 'javelin-behavior-load-blame' => array( 'uri' => '/res/138e2961/rsrc/js/application/diffusion/behavior-load-blame.js', 'type' => 'js', 'requires' => array( 0 => 'javelin-behavior', 1 => 'javelin-dom', 2 => 'javelin-request', ), 'disk' => '/rsrc/js/application/diffusion/behavior-load-blame.js', ), 'javelin-behavior-maniphest-batch-editor' => array( 'uri' => '/res/81b2b86f/rsrc/js/application/maniphest/behavior-batch-editor.js', 'type' => 'js', 'requires' => array( 0 => 'javelin-behavior', 1 => 'javelin-dom', 2 => 'javelin-util', 3 => 'phabricator-prefab', 4 => 'multirow-row-manager', 5 => 'javelin-json', ), 'disk' => '/rsrc/js/application/maniphest/behavior-batch-editor.js', ), 'javelin-behavior-maniphest-batch-selector' => array( 'uri' => '/res/423c5f1b/rsrc/js/application/maniphest/behavior-batch-selector.js', 'type' => 'js', 'requires' => array( 0 => 'javelin-behavior', 1 => 'javelin-dom', 2 => 'javelin-stratcom', 3 => 'javelin-util', ), 'disk' => '/rsrc/js/application/maniphest/behavior-batch-selector.js', ), 'javelin-behavior-maniphest-list-editor' => array( 'uri' => '/res/a251e72f/rsrc/js/application/maniphest/behavior-list-edit.js', 'type' => 'js', 'requires' => array( 0 => 'javelin-behavior', 1 => 'javelin-dom', 2 => 'javelin-stratcom', 3 => 'javelin-workflow', 4 => 'javelin-fx', 5 => 'javelin-util', ), 'disk' => '/rsrc/js/application/maniphest/behavior-list-edit.js', ), 'javelin-behavior-maniphest-subpriority-editor' => array( 'uri' => '/res/1fa4961f/rsrc/js/application/maniphest/behavior-subpriorityeditor.js', 'type' => 'js', 'requires' => array( 0 => 'javelin-behavior', 1 => 'javelin-dom', 2 => 'javelin-stratcom', 3 => 'javelin-workflow', 4 => 'phabricator-draggable-list', ), 'disk' => '/rsrc/js/application/maniphest/behavior-subpriorityeditor.js', ), 'javelin-behavior-maniphest-transaction-controls' => array( 'uri' => '/res/e8498688/rsrc/js/application/maniphest/behavior-transaction-controls.js', 'type' => 'js', 'requires' => array( 0 => 'javelin-behavior', 1 => 'javelin-dom', 2 => 'phabricator-prefab', ), 'disk' => '/rsrc/js/application/maniphest/behavior-transaction-controls.js', ), 'javelin-behavior-maniphest-transaction-expand' => array( 'uri' => '/res/966410de/rsrc/js/application/maniphest/behavior-transaction-expand.js', 'type' => 'js', 'requires' => array( 0 => 'javelin-behavior', 1 => 'javelin-dom', 2 => 'javelin-workflow', 3 => 'javelin-stratcom', ), 'disk' => '/rsrc/js/application/maniphest/behavior-transaction-expand.js', ), 'javelin-behavior-maniphest-transaction-preview' => array( 'uri' => '/res/9447a3f9/rsrc/js/application/maniphest/behavior-transaction-preview.js', 'type' => 'js', 'requires' => array( 0 => 'javelin-behavior', 1 => 'javelin-dom', 2 => 'javelin-util', 3 => 'javelin-json', 4 => 'javelin-stratcom', 5 => 'phabricator-shaped-request', ), 'disk' => '/rsrc/js/application/maniphest/behavior-transaction-preview.js', ), 'javelin-behavior-owners-path-editor' => array( 'uri' => '/res/9cf78ffc/rsrc/js/application/owners/owners-path-editor.js', 'type' => 'js', 'requires' => array( 0 => 'owners-path-editor', 1 => 'javelin-behavior', ), 'disk' => '/rsrc/js/application/owners/owners-path-editor.js', ), 'javelin-behavior-persona-login' => array( 'uri' => '/res/128fdf56/rsrc/js/application/auth/behavior-persona-login.js', 'type' => 'js', 'requires' => array( 0 => 'javelin-behavior', 1 => 'javelin-resource', 2 => 'javelin-stratcom', 3 => 'javelin-workflow', 4 => 'javelin-util', ), 'disk' => '/rsrc/js/application/auth/behavior-persona-login.js', ), 'javelin-behavior-phabricator-active-nav' => array( 'uri' => '/res/9c8d3df8/rsrc/js/core/behavior-active-nav.js', 'type' => 'js', 'requires' => array( 0 => 'javelin-behavior', 1 => 'javelin-stratcom', 2 => 'javelin-vector', 3 => 'javelin-dom', 4 => 'javelin-uri', ), 'disk' => '/rsrc/js/core/behavior-active-nav.js', ), 'javelin-behavior-phabricator-autofocus' => array( 'uri' => '/res/bf92b8d6/rsrc/js/core/behavior-autofocus.js', 'type' => 'js', 'requires' => array( 0 => 'javelin-behavior', 1 => 'javelin-dom', ), 'disk' => '/rsrc/js/core/behavior-autofocus.js', ), 'javelin-behavior-phabricator-busy-example' => array( 'uri' => '/res/dbe12f2f/rsrc/js/application/uiexample/busy-example.js', 'type' => 'js', 'requires' => array( 0 => 'phabricator-busy', 1 => 'javelin-behavior', ), 'disk' => '/rsrc/js/application/uiexample/busy-example.js', ), 'javelin-behavior-phabricator-file-tree' => array( 'uri' => '/res/e5bf93df/rsrc/js/core/behavior-file-tree.js', 'type' => 'js', 'requires' => array( 0 => 'javelin-behavior', 1 => 'phabricator-keyboard-shortcut', 2 => 'javelin-stratcom', ), 'disk' => '/rsrc/js/core/behavior-file-tree.js', ), 'javelin-behavior-phabricator-gesture' => array( 'uri' => '/res/16e1e77c/rsrc/js/core/behavior-gesture.js', 'type' => 'js', 'requires' => array( 0 => 'javelin-behavior', 1 => 'javelin-behavior-device', 2 => 'javelin-stratcom', 3 => 'javelin-vector', 4 => 'javelin-dom', 5 => 'javelin-magical-init', ), 'disk' => '/rsrc/js/core/behavior-gesture.js', ), 'javelin-behavior-phabricator-gesture-example' => array( 'uri' => '/res/91d1e7f2/rsrc/js/application/uiexample/gesture-example.js', 'type' => 'js', 'requires' => array( 0 => 'javelin-stratcom', 1 => 'javelin-behavior', 2 => 'javelin-vector', 3 => 'javelin-dom', ), 'disk' => '/rsrc/js/application/uiexample/gesture-example.js', ), 'javelin-behavior-phabricator-hovercards' => array( 'uri' => '/res/4fe6b436/rsrc/js/core/behavior-hovercard.js', 'type' => 'js', 'requires' => array( 0 => 'javelin-behavior', 1 => 'javelin-behavior-device', 2 => 'javelin-stratcom', 3 => 'javelin-vector', 4 => 'phabricator-hovercard', ), 'disk' => '/rsrc/js/core/behavior-hovercard.js', ), 'javelin-behavior-phabricator-keyboard-pager' => array( 'uri' => '/res/6a5445b8/rsrc/js/core/behavior-keyboard-pager.js', 'type' => 'js', 'requires' => array( 0 => 'javelin-behavior', 1 => 'javelin-uri', 2 => 'phabricator-keyboard-shortcut', ), 'disk' => '/rsrc/js/core/behavior-keyboard-pager.js', ), 'javelin-behavior-phabricator-keyboard-shortcuts' => array( 'uri' => '/res/b971e713/rsrc/js/core/behavior-keyboard-shortcuts.js', 'type' => 'js', 'requires' => array( 0 => 'javelin-behavior', 1 => 'javelin-workflow', 2 => 'javelin-json', 3 => 'javelin-dom', 4 => 'phabricator-keyboard-shortcut', ), 'disk' => '/rsrc/js/core/behavior-keyboard-shortcuts.js', ), 'javelin-behavior-phabricator-line-linker' => array( 'uri' => '/res/1cefdb6a/rsrc/js/core/behavior-line-linker.js', 'type' => 'js', 'requires' => array( 0 => 'javelin-behavior', 1 => 'javelin-stratcom', 2 => 'javelin-dom', 3 => 'javelin-history', ), 'disk' => '/rsrc/js/core/behavior-line-linker.js', ), 'javelin-behavior-phabricator-nav' => array( 'uri' => '/res/afabcf16/rsrc/js/core/behavior-phabricator-nav.js', 'type' => 'js', 'requires' => array( 0 => 'javelin-behavior', 1 => 'javelin-behavior-device', 2 => 'javelin-stratcom', 3 => 'javelin-dom', 4 => 'javelin-magical-init', 5 => 'javelin-vector', 6 => 'javelin-request', 7 => 'javelin-util', ), 'disk' => '/rsrc/js/core/behavior-phabricator-nav.js', ), 'javelin-behavior-phabricator-notification-example' => array( 'uri' => '/res/7c50cefd/rsrc/js/application/uiexample/notification-example.js', 'type' => 'js', 'requires' => array( 0 => 'phabricator-notification', 1 => 'javelin-stratcom', 2 => 'javelin-behavior', ), 'disk' => '/rsrc/js/application/uiexample/notification-example.js', ), 'javelin-behavior-phabricator-object-selector' => array( 'uri' => '/res/461f95f7/rsrc/js/core/behavior-object-selector.js', 'type' => 'js', 'requires' => array( 0 => 'javelin-behavior', 1 => 'javelin-dom', 2 => 'javelin-request', 3 => 'javelin-util', ), 'disk' => '/rsrc/js/core/behavior-object-selector.js', ), 'javelin-behavior-phabricator-oncopy' => array( 'uri' => '/res/cd3a9345/rsrc/js/core/behavior-oncopy.js', 'type' => 'js', 'requires' => array( 0 => 'javelin-behavior', 1 => 'javelin-dom', ), 'disk' => '/rsrc/js/core/behavior-oncopy.js', ), 'javelin-behavior-phabricator-remarkup-assist' => array( 'uri' => '/res/4153e95f/rsrc/js/core/behavior-phabricator-remarkup-assist.js', 'type' => 'js', 'requires' => array( 0 => 'javelin-behavior', 1 => 'javelin-stratcom', 2 => 'javelin-dom', 3 => 'phabricator-phtize', 4 => 'phabricator-textareautils', 5 => 'javelin-workflow', 6 => 'javelin-vector', ), 'disk' => '/rsrc/js/core/behavior-phabricator-remarkup-assist.js', ), 'javelin-behavior-phabricator-reveal-content' => array( 'uri' => '/res/fef525ef/rsrc/js/core/behavior-reveal-content.js', 'type' => 'js', 'requires' => array( 0 => 'javelin-behavior', 1 => 'javelin-stratcom', 2 => 'javelin-dom', ), 'disk' => '/rsrc/js/core/behavior-reveal-content.js', ), 'javelin-behavior-phabricator-search-typeahead' => array( 'uri' => '/res/409d9567/rsrc/js/core/behavior-search-typeahead.js', 'type' => 'js', 'requires' => array( 0 => 'javelin-behavior', 1 => 'javelin-typeahead-ondemand-source', 2 => 'javelin-typeahead', 3 => 'javelin-dom', 4 => 'javelin-uri', 5 => 'javelin-util', 6 => 'javelin-stratcom', ), 'disk' => '/rsrc/js/core/behavior-search-typeahead.js', ), 'javelin-behavior-phabricator-tooltips' => array( 'uri' => '/res/a0ac5320/rsrc/js/core/behavior-tooltip.js', 'type' => 'js', 'requires' => array( 0 => 'javelin-behavior', 1 => 'javelin-behavior-device', 2 => 'javelin-stratcom', 3 => 'phabricator-tooltip', ), 'disk' => '/rsrc/js/core/behavior-tooltip.js', ), 'javelin-behavior-phabricator-transaction-comment-form' => array( 'uri' => '/res/3c8d3c10/rsrc/js/application/transactions/behavior-transaction-comment-form.js', 'type' => 'js', 'requires' => array( 0 => 'javelin-behavior', 1 => 'javelin-dom', 2 => 'javelin-util', 3 => 'javelin-fx', 4 => 'javelin-request', 5 => 'phabricator-shaped-request', ), 'disk' => '/rsrc/js/application/transactions/behavior-transaction-comment-form.js', ), 'javelin-behavior-phabricator-transaction-list' => array( 'uri' => '/res/f05b3c6b/rsrc/js/application/transactions/behavior-transaction-list.js', 'type' => 'js', 'requires' => array( 0 => 'javelin-behavior', 1 => 'javelin-stratcom', 2 => 'javelin-workflow', 3 => 'javelin-dom', 4 => 'javelin-fx', ), 'disk' => '/rsrc/js/application/transactions/behavior-transaction-list.js', ), 'javelin-behavior-phabricator-watch-anchor' => array( 'uri' => '/res/69a90817/rsrc/js/core/behavior-watch-anchor.js', 'type' => 'js', 'requires' => array( 0 => 'javelin-behavior', 1 => 'javelin-stratcom', 2 => 'javelin-dom', 3 => 'javelin-vector', ), 'disk' => '/rsrc/js/core/behavior-watch-anchor.js', ), 'javelin-behavior-phame-post-preview' => array( 'uri' => '/res/181d1cbe/rsrc/js/application/phame/phame-post-preview.js', 'type' => 'js', 'requires' => array( 0 => 'javelin-behavior', 1 => 'javelin-dom', 2 => 'javelin-util', 3 => 'phabricator-shaped-request', ), 'disk' => '/rsrc/js/application/phame/phame-post-preview.js', ), 'javelin-behavior-pholio-mock-edit' => array( 'uri' => '/res/1fd14497/rsrc/js/application/pholio/behavior-pholio-mock-edit.js', 'type' => 'js', 'requires' => array( 0 => 'javelin-behavior', 1 => 'javelin-stratcom', 2 => 'javelin-dom', 3 => 'javelin-workflow', 4 => 'phabricator-phtize', 5 => 'phabricator-drag-and-drop-file-upload', 6 => 'phabricator-draggable-list', ), 'disk' => '/rsrc/js/application/pholio/behavior-pholio-mock-edit.js', ), 'javelin-behavior-pholio-mock-view' => array( 'uri' => '/res/f9588dcf/rsrc/js/application/pholio/behavior-pholio-mock-view.js', 'type' => 'js', 'requires' => array( 0 => 'javelin-behavior', 1 => 'javelin-util', 2 => 'javelin-stratcom', 3 => 'javelin-dom', 4 => 'javelin-vector', 5 => 'javelin-magical-init', 6 => 'javelin-request', 7 => 'javelin-history', 8 => 'javelin-workflow', 9 => 'javelin-mask', 10 => 'javelin-behavior-device', 11 => 'phabricator-keyboard-shortcut', ), 'disk' => '/rsrc/js/application/pholio/behavior-pholio-mock-view.js', ), 'javelin-behavior-phui-object-box-tabs' => array( 'uri' => '/res/c2318be8/rsrc/js/phui/behavior-phui-object-box-tabs.js', 'type' => 'js', 'requires' => array( 0 => 'javelin-behavior', 1 => 'javelin-stratcom', 2 => 'javelin-dom', ), 'disk' => '/rsrc/js/phui/behavior-phui-object-box-tabs.js', ), 'javelin-behavior-policy-control' => array( 'uri' => '/res/ce9f54c8/rsrc/js/application/policy/behavior-policy-control.js', 'type' => 'js', 'requires' => array( 0 => 'javelin-behavior', 1 => 'javelin-dom', 2 => 'javelin-util', 3 => 'phabricator-dropdown-menu', 4 => 'phabricator-menu-item', 5 => 'javelin-workflow', ), 'disk' => '/rsrc/js/application/policy/behavior-policy-control.js', ), 'javelin-behavior-policy-rule-editor' => array( 'uri' => '/res/4665236c/rsrc/js/application/policy/behavior-policy-rule-editor.js', 'type' => 'js', 'requires' => array( 0 => 'javelin-behavior', 1 => 'multirow-row-manager', 2 => 'javelin-dom', 3 => 'javelin-util', 4 => 'phabricator-prefab', 5 => 'javelin-tokenizer', 6 => 'javelin-typeahead', 7 => 'javelin-typeahead-preloaded-source', 8 => 'javelin-json', ), 'disk' => '/rsrc/js/application/policy/behavior-policy-rule-editor.js', ), 'javelin-behavior-ponder-votebox' => array( 'uri' => '/res/c28daa12/rsrc/js/application/ponder/behavior-votebox.js', 'type' => 'js', 'requires' => array( 0 => 'javelin-behavior', 1 => 'javelin-dom', 2 => 'javelin-util', 3 => 'javelin-stratcom', 4 => 'javelin-request', ), 'disk' => '/rsrc/js/application/ponder/behavior-votebox.js', ), 'javelin-behavior-project-create' => array( 'uri' => '/res/e91f3f8f/rsrc/js/application/projects/behavior-project-create.js', 'type' => 'js', 'requires' => array( 0 => 'javelin-behavior', 1 => 'javelin-dom', 2 => 'javelin-stratcom', 3 => 'javelin-workflow', ), 'disk' => '/rsrc/js/application/projects/behavior-project-create.js', ), 'javelin-behavior-refresh-csrf' => array( 'uri' => '/res/6c54100f/rsrc/js/core/behavior-refresh-csrf.js', 'type' => 'js', 'requires' => array( 0 => 'javelin-request', 1 => 'javelin-behavior', 2 => 'javelin-dom', 3 => 'phabricator-busy', ), 'disk' => '/rsrc/js/core/behavior-refresh-csrf.js', ), 'javelin-behavior-releeph-preview-branch' => array( 'uri' => '/res/f694854d/rsrc/js/application/releeph/releeph-preview-branch.js', 'type' => 'js', 'requires' => array( 0 => 'javelin-behavior', 1 => 'javelin-dom', 2 => 'javelin-uri', 3 => 'javelin-request', ), 'disk' => '/rsrc/js/application/releeph/releeph-preview-branch.js', ), 'javelin-behavior-releeph-request-state-change' => array( 'uri' => '/res/07ecde0c/rsrc/js/application/releeph/releeph-request-state-change.js', 'type' => 'js', 'requires' => array( 0 => 'javelin-behavior', 1 => 'javelin-dom', 2 => 'javelin-stratcom', 3 => 'javelin-request', 4 => 'phabricator-keyboard-shortcut', 5 => 'phabricator-notification', ), 'disk' => '/rsrc/js/application/releeph/releeph-request-state-change.js', ), 'javelin-behavior-releeph-request-typeahead' => array( 'uri' => '/res/2c2350a0/rsrc/js/application/releeph/releeph-request-typeahead.js', 'type' => 'js', 'requires' => array( 0 => 'javelin-behavior', 1 => 'javelin-dom', 2 => 'javelin-typeahead', 3 => 'javelin-typeahead-ondemand-source', 4 => 'javelin-dom', ), 'disk' => '/rsrc/js/application/releeph/releeph-request-typeahead.js', ), 'javelin-behavior-remarkup-preview' => array( 'uri' => '/res/6ec98508/rsrc/js/core/behavior-remarkup-preview.js', 'type' => 'js', 'requires' => array( 0 => 'javelin-behavior', 1 => 'javelin-dom', 2 => 'javelin-util', 3 => 'phabricator-shaped-request', ), 'disk' => '/rsrc/js/core/behavior-remarkup-preview.js', ), 'javelin-behavior-repository-crossreference' => array( 'uri' => '/res/d3f9d50b/rsrc/js/application/repository/repository-crossreference.js', 'type' => 'js', 'requires' => array( 0 => 'javelin-behavior', 1 => 'javelin-dom', 2 => 'javelin-stratcom', 3 => 'javelin-uri', ), 'disk' => '/rsrc/js/application/repository/repository-crossreference.js', ), 'javelin-behavior-search-reorder-queries' => array( 'uri' => '/res/9864b481/rsrc/js/application/search/behavior-reorder-queries.js', 'type' => 'js', 'requires' => array( 0 => 'javelin-behavior', 1 => 'javelin-stratcom', 2 => 'javelin-workflow', 3 => 'javelin-dom', 4 => 'phabricator-draggable-list', ), 'disk' => '/rsrc/js/application/search/behavior-reorder-queries.js', ), 'javelin-behavior-slowvote-embed' => array( 'uri' => '/res/8e85e20d/rsrc/js/application/slowvote/behavior-slowvote-embed.js', 'type' => 'js', 'requires' => array( 0 => 'javelin-behavior', 1 => 'javelin-request', 2 => 'javelin-stratcom', 3 => 'javelin-dom', ), 'disk' => '/rsrc/js/application/slowvote/behavior-slowvote-embed.js', ), 'javelin-behavior-stripe-payment-form' => array( 'uri' => '/res/c1a12d77/rsrc/js/application/phortune/behavior-stripe-payment-form.js', 'type' => 'js', 'requires' => array( 0 => 'javelin-behavior', 1 => 'javelin-dom', 2 => 'phortune-credit-card-form', ), 'disk' => '/rsrc/js/application/phortune/behavior-stripe-payment-form.js', ), 'javelin-behavior-test-payment-form' => array( 'uri' => '/res/a8fe8616/rsrc/js/application/phortune/behavior-test-payment-form.js', 'type' => 'js', 'requires' => array( 0 => 'javelin-behavior', 1 => 'javelin-dom', 2 => 'phortune-credit-card-form', ), 'disk' => '/rsrc/js/application/phortune/behavior-test-payment-form.js', ), 'javelin-behavior-toggle-class' => array( 'uri' => '/res/79921b7f/rsrc/js/core/behavior-toggle-class.js', 'type' => 'js', 'requires' => array( 0 => 'javelin-behavior', 1 => 'javelin-stratcom', 2 => 'javelin-dom', ), 'disk' => '/rsrc/js/core/behavior-toggle-class.js', ), 'javelin-behavior-view-placeholder' => array( 'uri' => '/res/6abdb85b/rsrc/externals/javelin/ext/view/ViewPlaceholder.js', 'type' => 'js', 'requires' => array( 0 => 'javelin-behavior', 1 => 'javelin-dom', 2 => 'javelin-view-renderer', 3 => 'javelin-install', ), 'disk' => '/rsrc/externals/javelin/ext/view/ViewPlaceholder.js', ), 'javelin-behavior-workflow' => array( 'uri' => '/res/144d3196/rsrc/js/core/behavior-workflow.js', 'type' => 'js', 'requires' => array( 0 => 'javelin-behavior', 1 => 'javelin-stratcom', 2 => 'javelin-workflow', 3 => 'javelin-dom', ), 'disk' => '/rsrc/js/core/behavior-workflow.js', ), 'javelin-color' => array( 'uri' => '/res/f17034de/rsrc/externals/javelin/ext/fx/Color.js', 'type' => 'js', 'requires' => array( 0 => 'javelin-install', ), 'disk' => '/rsrc/externals/javelin/ext/fx/Color.js', ), 'javelin-cookie' => array( 'uri' => '/res/ee0d399f/rsrc/externals/javelin/lib/Cookie.js', 'type' => 'js', 'requires' => array( 0 => 'javelin-install', 1 => 'javelin-util', ), 'disk' => '/rsrc/externals/javelin/lib/Cookie.js', ), 'javelin-dom' => array( 'uri' => '/res/580c0aeb/rsrc/externals/javelin/lib/DOM.js', 'type' => 'js', 'requires' => array( 0 => 'javelin-magical-init', 1 => 'javelin-install', 2 => 'javelin-util', 3 => 'javelin-vector', 4 => 'javelin-stratcom', ), 'disk' => '/rsrc/externals/javelin/lib/DOM.js', ), 'javelin-dynval' => array( 'uri' => '/res/ea6f2a9d/rsrc/externals/javelin/ext/reactor/core/DynVal.js', 'type' => 'js', 'requires' => array( 0 => 'javelin-install', 1 => 'javelin-reactornode', 2 => 'javelin-util', 3 => 'javelin-reactor', ), 'disk' => '/rsrc/externals/javelin/ext/reactor/core/DynVal.js', ), 'javelin-event' => array( 'uri' => '/res/5f70f4d0/rsrc/externals/javelin/core/Event.js', 'type' => 'js', 'requires' => array( 0 => 'javelin-install', ), 'disk' => '/rsrc/externals/javelin/core/Event.js', ), 'javelin-fx' => array( 'uri' => '/res/23fb3d44/rsrc/externals/javelin/ext/fx/FX.js', 'type' => 'js', 'requires' => array( 0 => 'javelin-color', 1 => 'javelin-install', 2 => 'javelin-util', ), 'disk' => '/rsrc/externals/javelin/ext/fx/FX.js', ), 'javelin-history' => array( 'uri' => '/res/6c084b09/rsrc/externals/javelin/lib/History.js', 'type' => 'js', 'requires' => array( 0 => 'javelin-stratcom', 1 => 'javelin-install', 2 => 'javelin-uri', 3 => 'javelin-util', ), 'disk' => '/rsrc/externals/javelin/lib/History.js', ), 'javelin-install' => array( 'uri' => '/res/904356c0/rsrc/externals/javelin/core/install.js', 'type' => 'js', 'requires' => array( 0 => 'javelin-util', 1 => 'javelin-magical-init', ), 'disk' => '/rsrc/externals/javelin/core/install.js', ), 'javelin-json' => array( 'uri' => '/res/cf83e72c/rsrc/externals/javelin/lib/JSON.js', 'type' => 'js', 'requires' => array( 0 => 'javelin-install', ), 'disk' => '/rsrc/externals/javelin/lib/JSON.js', ), 'javelin-magical-init' => array( 'uri' => '/res/374d1f02/rsrc/externals/javelin/core/init.js', 'type' => 'js', 'requires' => array( ), 'disk' => '/rsrc/externals/javelin/core/init.js', ), 'javelin-mask' => array( 'uri' => '/res/465cf513/rsrc/externals/javelin/lib/Mask.js', 'type' => 'js', 'requires' => array( 0 => 'javelin-install', 1 => 'javelin-dom', ), 'disk' => '/rsrc/externals/javelin/lib/Mask.js', ), 'javelin-reactor' => array( 'uri' => '/res/c05f2658/rsrc/externals/javelin/ext/reactor/core/Reactor.js', 'type' => 'js', 'requires' => array( 0 => 'javelin-install', 1 => 'javelin-util', ), 'disk' => '/rsrc/externals/javelin/ext/reactor/core/Reactor.js', ), 'javelin-reactor-dom' => array( 'uri' => '/res/5e03117e/rsrc/externals/javelin/ext/reactor/dom/RDOM.js', 'type' => 'js', 'requires' => array( 0 => 'javelin-dom', 1 => 'javelin-dynval', 2 => 'javelin-reactor', 3 => 'javelin-reactornode', 4 => 'javelin-install', 5 => 'javelin-util', ), 'disk' => '/rsrc/externals/javelin/ext/reactor/dom/RDOM.js', ), 'javelin-reactor-node-calmer' => array( 'uri' => '/res/a93dd6b6/rsrc/externals/javelin/ext/reactor/core/ReactorNodeCalmer.js', 'type' => 'js', 'requires' => array( 0 => 'javelin-install', 1 => 'javelin-reactor', 2 => 'javelin-util', ), 'disk' => '/rsrc/externals/javelin/ext/reactor/core/ReactorNodeCalmer.js', ), 'javelin-reactornode' => array( 'uri' => '/res/4eac475b/rsrc/externals/javelin/ext/reactor/core/ReactorNode.js', 'type' => 'js', 'requires' => array( 0 => 'javelin-install', 1 => 'javelin-reactor', 2 => 'javelin-util', 3 => 'javelin-reactor-node-calmer', ), 'disk' => '/rsrc/externals/javelin/ext/reactor/core/ReactorNode.js', ), 'javelin-request' => array( 'uri' => '/res/687bdcfc/rsrc/externals/javelin/lib/Request.js', 'type' => 'js', 'requires' => array( 0 => 'javelin-install', 1 => 'javelin-stratcom', 2 => 'javelin-util', 3 => 'javelin-behavior', 4 => 'javelin-json', 5 => 'javelin-dom', 6 => 'javelin-resource', ), 'disk' => '/rsrc/externals/javelin/lib/Request.js', ), 'javelin-resource' => array( 'uri' => '/res/33a3bb57/rsrc/externals/javelin/lib/Resource.js', 'type' => 'js', 'requires' => array( 0 => 'javelin-util', 1 => 'javelin-uri', 2 => 'javelin-install', ), 'disk' => '/rsrc/externals/javelin/lib/Resource.js', ), 'javelin-stratcom' => array( 'uri' => '/res/714946e7/rsrc/externals/javelin/core/Stratcom.js', 'type' => 'js', 'requires' => array( 0 => 'javelin-install', 1 => 'javelin-event', 2 => 'javelin-util', 3 => 'javelin-magical-init', ), 'disk' => '/rsrc/externals/javelin/core/Stratcom.js', ), 'javelin-tokenizer' => array( 'uri' => '/res/cddb70f3/rsrc/externals/javelin/lib/control/tokenizer/Tokenizer.js', 'type' => 'js', 'requires' => array( 0 => 'javelin-dom', 1 => 'javelin-util', 2 => 'javelin-stratcom', 3 => 'javelin-install', ), 'disk' => '/rsrc/externals/javelin/lib/control/tokenizer/Tokenizer.js', ), 'javelin-typeahead' => array( 'uri' => '/res/fd79f758/rsrc/externals/javelin/lib/control/typeahead/Typeahead.js', 'type' => 'js', 'requires' => array( 0 => 'javelin-install', 1 => 'javelin-dom', 2 => 'javelin-vector', 3 => 'javelin-util', ), 'disk' => '/rsrc/externals/javelin/lib/control/typeahead/Typeahead.js', ), 'javelin-typeahead-composite-source' => array( 'uri' => '/res/487b3da2/rsrc/externals/javelin/lib/control/typeahead/source/TypeaheadCompositeSource.js', 'type' => 'js', 'requires' => array( 0 => 'javelin-install', 1 => 'javelin-typeahead-source', 2 => 'javelin-util', ), 'disk' => '/rsrc/externals/javelin/lib/control/typeahead/source/TypeaheadCompositeSource.js', ), 'javelin-typeahead-normalizer' => array( 'uri' => '/res/5a4bd979/rsrc/externals/javelin/lib/control/typeahead/normalizer/TypeaheadNormalizer.js', 'type' => 'js', 'requires' => array( 0 => 'javelin-install', ), 'disk' => '/rsrc/externals/javelin/lib/control/typeahead/normalizer/TypeaheadNormalizer.js', ), 'javelin-typeahead-ondemand-source' => array( 'uri' => '/res/92286a21/rsrc/externals/javelin/lib/control/typeahead/source/TypeaheadOnDemandSource.js', 'type' => 'js', 'requires' => array( 0 => 'javelin-install', 1 => 'javelin-util', 2 => 'javelin-request', 3 => 'javelin-typeahead-source', ), 'disk' => '/rsrc/externals/javelin/lib/control/typeahead/source/TypeaheadOnDemandSource.js', ), 'javelin-typeahead-preloaded-source' => array( 'uri' => '/res/147900c7/rsrc/externals/javelin/lib/control/typeahead/source/TypeaheadPreloadedSource.js', 'type' => 'js', 'requires' => array( 0 => 'javelin-install', 1 => 'javelin-util', 2 => 'javelin-request', 3 => 'javelin-typeahead-source', ), 'disk' => '/rsrc/externals/javelin/lib/control/typeahead/source/TypeaheadPreloadedSource.js', ), 'javelin-typeahead-source' => array( 'uri' => '/res/13289259/rsrc/externals/javelin/lib/control/typeahead/source/TypeaheadSource.js', 'type' => 'js', 'requires' => array( 0 => 'javelin-install', 1 => 'javelin-util', 2 => 'javelin-dom', 3 => 'javelin-typeahead-normalizer', ), 'disk' => '/rsrc/externals/javelin/lib/control/typeahead/source/TypeaheadSource.js', ), 'javelin-typeahead-static-source' => array( 'uri' => '/res/bb0a5173/rsrc/externals/javelin/lib/control/typeahead/source/TypeaheadStaticSource.js', 'type' => 'js', 'requires' => array( 0 => 'javelin-install', 1 => 'javelin-typeahead-source', ), 'disk' => '/rsrc/externals/javelin/lib/control/typeahead/source/TypeaheadStaticSource.js', ), 'javelin-uri' => array( 'uri' => '/res/75aa4597/rsrc/externals/javelin/lib/URI.js', 'type' => 'js', 'requires' => array( 0 => 'javelin-install', 1 => 'javelin-util', 2 => 'javelin-stratcom', ), 'disk' => '/rsrc/externals/javelin/lib/URI.js', ), 'javelin-util' => array( 'uri' => '/res/90222113/rsrc/externals/javelin/core/util.js', 'type' => 'js', 'requires' => array( ), 'disk' => '/rsrc/externals/javelin/core/util.js', ), 'javelin-vector' => array( 'uri' => '/res/58ea3dd7/rsrc/externals/javelin/lib/Vector.js', 'type' => 'js', 'requires' => array( 0 => 'javelin-install', 1 => 'javelin-event', ), 'disk' => '/rsrc/externals/javelin/lib/Vector.js', ), 'javelin-view' => array( 'uri' => '/res/38daaec0/rsrc/externals/javelin/ext/view/View.js', 'type' => 'js', 'requires' => array( 0 => 'javelin-install', 1 => 'javelin-util', ), 'disk' => '/rsrc/externals/javelin/ext/view/View.js', ), 'javelin-view-html' => array( 'uri' => '/res/0d225e8c/rsrc/externals/javelin/ext/view/HTMLView.js', 'type' => 'js', 'requires' => array( 0 => 'javelin-install', 1 => 'javelin-dom', 2 => 'javelin-view-visitor', 3 => 'javelin-util', ), 'disk' => '/rsrc/externals/javelin/ext/view/HTMLView.js', ), 'javelin-view-interpreter' => array( 'uri' => '/res/b0c07f96/rsrc/externals/javelin/ext/view/ViewInterpreter.js', 'type' => 'js', 'requires' => array( 0 => 'javelin-view', 1 => 'javelin-install', 2 => 'javelin-dom', ), 'disk' => '/rsrc/externals/javelin/ext/view/ViewInterpreter.js', ), 'javelin-view-renderer' => array( 'uri' => '/res/fe0d2f60/rsrc/externals/javelin/ext/view/ViewRenderer.js', 'type' => 'js', 'requires' => array( 0 => 'javelin-install', 1 => 'javelin-util', ), 'disk' => '/rsrc/externals/javelin/ext/view/ViewRenderer.js', ), 'javelin-view-visitor' => array( 'uri' => '/res/b1606cec/rsrc/externals/javelin/ext/view/ViewVisitor.js', 'type' => 'js', 'requires' => array( 0 => 'javelin-install', 1 => 'javelin-util', ), 'disk' => '/rsrc/externals/javelin/ext/view/ViewVisitor.js', ), 'javelin-workflow' => array( 'uri' => '/res/09a97dda/rsrc/externals/javelin/lib/Workflow.js', 'type' => 'js', 'requires' => array( 0 => 'javelin-stratcom', 1 => 'javelin-request', 2 => 'javelin-dom', 3 => 'javelin-vector', 4 => 'javelin-install', 5 => 'javelin-util', 6 => 'javelin-mask', 7 => 'javelin-uri', ), 'disk' => '/rsrc/externals/javelin/lib/Workflow.js', ), 'legalpad-documentbody-css' => array( 'uri' => '/res/034c3494/rsrc/css/application/legalpad/legalpad-documentbody.css', 'type' => 'css', 'requires' => array( ), 'disk' => '/rsrc/css/application/legalpad/legalpad-documentbody.css', ), 'lightbox-attachment-css' => array( 'uri' => '/res/4657e15d/rsrc/css/aphront/lightbox-attachment.css', 'type' => 'css', 'requires' => array( ), 'disk' => '/rsrc/css/aphront/lightbox-attachment.css', ), 'maniphest-batch-editor' => array( 'uri' => '/res/fb15d744/rsrc/css/application/maniphest/batch-editor.css', 'type' => 'css', 'requires' => array( ), 'disk' => '/rsrc/css/application/maniphest/batch-editor.css', ), 'maniphest-report-css' => array( 'uri' => '/res/2e633fcf/rsrc/css/application/maniphest/report.css', 'type' => 'css', 'requires' => array( ), 'disk' => '/rsrc/css/application/maniphest/report.css', ), 'maniphest-task-edit-css' => array( 'uri' => '/res/f5926f5a/rsrc/css/application/maniphest/task-edit.css', 'type' => 'css', 'requires' => array( ), 'disk' => '/rsrc/css/application/maniphest/task-edit.css', ), 'maniphest-task-summary-css' => array( 'uri' => '/res/5de3b188/rsrc/css/application/maniphest/task-summary.css', 'type' => 'css', 'requires' => array( ), 'disk' => '/rsrc/css/application/maniphest/task-summary.css', ), 'multirow-row-manager' => array( 'uri' => '/res/408fae4f/rsrc/js/core/MultirowRowManager.js', 'type' => 'js', 'requires' => array( 0 => 'javelin-install', 1 => 'javelin-stratcom', 2 => 'javelin-dom', 3 => 'javelin-util', ), 'disk' => '/rsrc/js/core/MultirowRowManager.js', ), 'owners-path-editor' => array( 'uri' => '/res/29b68354/rsrc/js/application/owners/OwnersPathEditor.js', 'type' => 'js', 'requires' => array( 0 => 'multirow-row-manager', 1 => 'javelin-install', 2 => 'path-typeahead', 3 => 'javelin-dom', 4 => 'javelin-util', 5 => 'phabricator-prefab', ), 'disk' => '/rsrc/js/application/owners/OwnersPathEditor.js', ), 'owners-path-editor-css' => array( 'uri' => '/res/c91cc4a8/rsrc/css/application/owners/owners-path-editor.css', 'type' => 'css', 'requires' => array( ), 'disk' => '/rsrc/css/application/owners/owners-path-editor.css', ), 'paste-css' => array( 'uri' => '/res/216fbfe9/rsrc/css/application/paste/paste.css', 'type' => 'css', 'requires' => array( ), 'disk' => '/rsrc/css/application/paste/paste.css', ), 'path-typeahead' => array( 'uri' => '/res/50246fb6/rsrc/js/application/herald/PathTypeahead.js', 'type' => 'js', 'requires' => array( 0 => 'javelin-install', 1 => 'javelin-typeahead', 2 => 'javelin-dom', 3 => 'javelin-request', 4 => 'javelin-typeahead-ondemand-source', 5 => 'javelin-util', ), 'disk' => '/rsrc/js/application/herald/PathTypeahead.js', ), 'people-profile-css' => array( 'uri' => '/res/f1da102e/rsrc/css/application/people/people-profile.css', 'type' => 'css', 'requires' => array( ), 'disk' => '/rsrc/css/application/people/people-profile.css', ), 'phabricator-action-header-view-css' => array( 'uri' => '/res/cd8b4a61/rsrc/css/layout/phabricator-action-header-view.css', 'type' => 'css', 'requires' => array( ), 'disk' => '/rsrc/css/layout/phabricator-action-header-view.css', ), 'phabricator-action-list-view-css' => array( 'uri' => '/res/2dce4556/rsrc/css/layout/phabricator-action-list-view.css', 'type' => 'css', 'requires' => array( ), 'disk' => '/rsrc/css/layout/phabricator-action-list-view.css', ), 'phabricator-application-launch-view-css' => array( 'uri' => '/res/21a67228/rsrc/css/application/base/phabricator-application-launch-view.css', 'type' => 'css', 'requires' => array( ), 'disk' => '/rsrc/css/application/base/phabricator-application-launch-view.css', ), 'phabricator-busy' => array( 'uri' => '/res/083c11d2/rsrc/js/core/Busy.js', 'type' => 'js', 'requires' => array( 0 => 'javelin-install', 1 => 'javelin-dom', 2 => 'javelin-fx', ), 'disk' => '/rsrc/js/core/Busy.js', ), 'phabricator-chatlog-css' => array( 'uri' => '/res/cf9b0aa7/rsrc/css/application/chatlog/chatlog.css', 'type' => 'css', 'requires' => array( ), 'disk' => '/rsrc/css/application/chatlog/chatlog.css', ), 'phabricator-content-source-view-css' => array( 'uri' => '/res/f15a9527/rsrc/css/application/contentsource/content-source-view.css', 'type' => 'css', 'requires' => array( ), 'disk' => '/rsrc/css/application/contentsource/content-source-view.css', ), 'phabricator-core-css' => array( 'uri' => '/res/9e767fb1/rsrc/css/core/core.css', 'type' => 'css', 'requires' => array( ), 'disk' => '/rsrc/css/core/core.css', ), 'phabricator-countdown-css' => array( 'uri' => '/res/d85bdfd5/rsrc/css/application/countdown/timer.css', 'type' => 'css', 'requires' => array( ), 'disk' => '/rsrc/css/application/countdown/timer.css', ), 'phabricator-crumbs-view-css' => array( 'uri' => '/res/f3c7068b/rsrc/css/layout/phabricator-crumbs-view.css', 'type' => 'css', 'requires' => array( ), 'disk' => '/rsrc/css/layout/phabricator-crumbs-view.css', ), 'phabricator-drag-and-drop-file-upload' => array( 'uri' => '/res/396d3b3b/rsrc/js/core/DragAndDropFileUpload.js', 'type' => 'js', 'requires' => array( 0 => 'javelin-install', 1 => 'javelin-util', 2 => 'javelin-request', 3 => 'javelin-dom', 4 => 'javelin-uri', 5 => 'phabricator-file-upload', ), 'disk' => '/rsrc/js/core/DragAndDropFileUpload.js', ), 'phabricator-draggable-list' => array( 'uri' => '/res/75c556db/rsrc/js/core/DraggableList.js', 'type' => 'js', 'requires' => array( 0 => 'javelin-install', 1 => 'javelin-dom', 2 => 'javelin-stratcom', 3 => 'javelin-util', 4 => 'javelin-vector', 5 => 'javelin-magical-init', ), 'disk' => '/rsrc/js/core/DraggableList.js', ), 'phabricator-dropdown-menu' => array( 'uri' => '/res/147ca011/rsrc/js/core/DropdownMenu.js', 'type' => 'js', 'requires' => array( 0 => 'javelin-install', 1 => 'javelin-util', 2 => 'javelin-dom', 3 => 'javelin-vector', 4 => 'javelin-stratcom', 5 => 'phabricator-menu-item', ), 'disk' => '/rsrc/js/core/DropdownMenu.js', ), 'phabricator-fatal-config-template-css' => array( 'uri' => '/res/6e1a8d22/rsrc/css/application/config/config-template.css', 'type' => 'css', 'requires' => array( ), 'disk' => '/rsrc/css/application/config/config-template.css', ), 'phabricator-feed-css' => array( 'uri' => '/res/e19633ed/rsrc/css/application/feed/feed.css', 'type' => 'css', 'requires' => array( ), 'disk' => '/rsrc/css/application/feed/feed.css', ), 'phabricator-file-upload' => array( 'uri' => '/res/c9605008/rsrc/js/core/FileUpload.js', 'type' => 'js', 'requires' => array( 0 => 'javelin-install', 1 => 'javelin-dom', 2 => 'phabricator-notification', ), 'disk' => '/rsrc/js/core/FileUpload.js', ), 'phabricator-filetree-view-css' => array( 'uri' => '/res/c912ed91/rsrc/css/layout/phabricator-filetree-view.css', 'type' => 'css', 'requires' => array( ), 'disk' => '/rsrc/css/layout/phabricator-filetree-view.css', ), 'phabricator-flag-css' => array( 'uri' => '/res/cdb5cb1b/rsrc/css/application/flag/flag.css', 'type' => 'css', 'requires' => array( ), 'disk' => '/rsrc/css/application/flag/flag.css', ), 'phabricator-hovercard' => array( 'uri' => '/res/7fb94260/rsrc/js/core/Hovercard.js', 'type' => 'js', 'requires' => array( 0 => 'javelin-install', 1 => 'javelin-dom', 2 => 'javelin-vector', 3 => 'javelin-request', 4 => 'javelin-uri', ), 'disk' => '/rsrc/js/core/Hovercard.js', ), 'phabricator-hovercard-view-css' => array( 'uri' => '/res/79c61f0e/rsrc/css/layout/phabricator-hovercard-view.css', 'type' => 'css', 'requires' => array( ), 'disk' => '/rsrc/css/layout/phabricator-hovercard-view.css', ), 'phabricator-jump-nav' => array( 'uri' => '/res/7db8cead/rsrc/css/application/directory/phabricator-jump-nav.css', 'type' => 'css', 'requires' => array( ), 'disk' => '/rsrc/css/application/directory/phabricator-jump-nav.css', ), 'phabricator-keyboard-shortcut' => array( 'uri' => '/res/44747afd/rsrc/js/core/KeyboardShortcut.js', 'type' => 'js', 'requires' => array( 0 => 'javelin-install', 1 => 'javelin-util', 2 => 'phabricator-keyboard-shortcut-manager', ), 'disk' => '/rsrc/js/core/KeyboardShortcut.js', ), 'phabricator-keyboard-shortcut-manager' => array( 'uri' => '/res/bf9bc02a/rsrc/js/core/KeyboardShortcutManager.js', 'type' => 'js', 'requires' => array( 0 => 'javelin-install', 1 => 'javelin-util', 2 => 'javelin-stratcom', 3 => 'javelin-dom', 4 => 'javelin-vector', ), 'disk' => '/rsrc/js/core/KeyboardShortcutManager.js', ), 'phabricator-main-menu-view' => array( 'uri' => '/res/95ff522a/rsrc/css/application/base/main-menu-view.css', 'type' => 'css', 'requires' => array( ), 'disk' => '/rsrc/css/application/base/main-menu-view.css', ), 'phabricator-menu-item' => array( 'uri' => '/res/e810b0a1/rsrc/js/core/DropdownMenuItem.js', 'type' => 'js', 'requires' => array( 0 => 'javelin-install', 1 => 'javelin-dom', ), 'disk' => '/rsrc/js/core/DropdownMenuItem.js', ), 'phabricator-nav-view-css' => array( 'uri' => '/res/37955b6a/rsrc/css/aphront/phabricator-nav-view.css', 'type' => 'css', 'requires' => array( ), 'disk' => '/rsrc/css/aphront/phabricator-nav-view.css', ), 'phabricator-notification' => array( 'uri' => '/res/0764da14/rsrc/js/core/Notification.js', 'type' => 'js', 'requires' => array( 0 => 'javelin-install', 1 => 'javelin-dom', 2 => 'javelin-stratcom', 3 => 'javelin-util', 4 => 'phabricator-notification-css', ), 'disk' => '/rsrc/js/core/Notification.js', ), 'phabricator-notification-css' => array( 'uri' => '/res/2b9cdac0/rsrc/css/aphront/notification.css', 'type' => 'css', 'requires' => array( ), 'disk' => '/rsrc/css/aphront/notification.css', ), 'phabricator-notification-menu-css' => array( 'uri' => '/res/c6b17cfb/rsrc/css/application/base/notification-menu.css', 'type' => 'css', 'requires' => array( ), 'disk' => '/rsrc/css/application/base/notification-menu.css', ), 'phabricator-object-list-view-css' => array( 'uri' => '/res/4f183668/rsrc/css/application/projects/phabricator-object-list-view.css', 'type' => 'css', 'requires' => array( ), 'disk' => '/rsrc/css/application/projects/phabricator-object-list-view.css', ), 'phabricator-object-selector-css' => array( 'uri' => '/res/20c94e28/rsrc/css/application/objectselector/object-selector.css', 'type' => 'css', 'requires' => array( 0 => 'aphront-dialog-view-css', ), 'disk' => '/rsrc/css/application/objectselector/object-selector.css', ), 'phabricator-phtize' => array( 'uri' => '/res/dc655a81/rsrc/js/core/phtize.js', 'type' => 'js', 'requires' => array( 0 => 'javelin-util', ), 'disk' => '/rsrc/js/core/phtize.js', ), 'phabricator-prefab' => array( 'uri' => '/res/511859ca/rsrc/js/core/Prefab.js', 'type' => 'js', 'requires' => array( 0 => 'javelin-install', 1 => 'javelin-util', 2 => 'javelin-dom', 3 => 'javelin-typeahead', 4 => 'javelin-tokenizer', 5 => 'javelin-typeahead-preloaded-source', 6 => 'javelin-typeahead-ondemand-source', 7 => 'javelin-dom', 8 => 'javelin-stratcom', 9 => 'javelin-util', ), 'disk' => '/rsrc/js/core/Prefab.js', ), 'phabricator-profile-css' => array( 'uri' => '/res/c1f72695/rsrc/css/application/profile/profile-view.css', 'type' => 'css', 'requires' => array( ), 'disk' => '/rsrc/css/application/profile/profile-view.css', ), 'phabricator-project-tag-css' => array( 'uri' => '/res/535b8b7a/rsrc/css/application/projects/project-tag.css', 'type' => 'css', 'requires' => array( ), 'disk' => '/rsrc/css/application/projects/project-tag.css', ), 'phabricator-remarkup-css' => array( 'uri' => '/res/4c313572/rsrc/css/core/remarkup.css', 'type' => 'css', 'requires' => array( ), 'disk' => '/rsrc/css/core/remarkup.css', ), 'phabricator-search-results-css' => array( 'uri' => '/res/5407f3ea/rsrc/css/application/search/search-results.css', 'type' => 'css', 'requires' => array( ), 'disk' => '/rsrc/css/application/search/search-results.css', ), 'phabricator-settings-css' => array( 'uri' => '/res/fb9d017f/rsrc/css/application/settings/settings.css', 'type' => 'css', 'requires' => array( ), 'disk' => '/rsrc/css/application/settings/settings.css', ), 'phabricator-shaped-request' => array( 'uri' => '/res/d173af85/rsrc/js/core/ShapedRequest.js', 'type' => 'js', 'requires' => array( 0 => 'javelin-install', 1 => 'javelin-util', 2 => 'javelin-request', ), 'disk' => '/rsrc/js/core/ShapedRequest.js', ), 'phabricator-side-menu-view-css' => array( 'uri' => '/res/e83fbe58/rsrc/css/layout/phabricator-side-menu-view.css', 'type' => 'css', 'requires' => array( ), 'disk' => '/rsrc/css/layout/phabricator-side-menu-view.css', ), 'phabricator-slowvote-css' => array( 'uri' => '/res/e61a54eb/rsrc/css/application/slowvote/slowvote.css', 'type' => 'css', 'requires' => array( ), 'disk' => '/rsrc/css/application/slowvote/slowvote.css', ), 'phabricator-source-code-view-css' => array( 'uri' => '/res/aee63670/rsrc/css/layout/phabricator-source-code-view.css', 'type' => 'css', 'requires' => array( ), 'disk' => '/rsrc/css/layout/phabricator-source-code-view.css', ), 'phabricator-standard-page-view' => array( 'uri' => '/res/eebd59cd/rsrc/css/application/base/standard-page-view.css', 'type' => 'css', 'requires' => array( ), 'disk' => '/rsrc/css/application/base/standard-page-view.css', ), 'phabricator-tag-view-css' => array( 'uri' => '/res/65ad2dc3/rsrc/css/layout/phabricator-tag-view.css', 'type' => 'css', 'requires' => array( ), 'disk' => '/rsrc/css/layout/phabricator-tag-view.css', ), 'phabricator-textareautils' => array( 'uri' => '/res/03c03e8b/rsrc/js/core/TextAreaUtils.js', 'type' => 'js', 'requires' => array( 0 => 'javelin-install', ), 'disk' => '/rsrc/js/core/TextAreaUtils.js', ), 'phabricator-timeline-view-css' => array( 'uri' => '/res/d139291d/rsrc/css/layout/phabricator-timeline-view.css', 'type' => 'css', 'requires' => array( ), 'disk' => '/rsrc/css/layout/phabricator-timeline-view.css', ), 'phabricator-tooltip' => array( 'uri' => '/res/a23bc887/rsrc/js/core/ToolTip.js', 'type' => 'js', 'requires' => array( 0 => 'javelin-install', 1 => 'javelin-util', 2 => 'javelin-dom', 3 => 'javelin-vector', ), 'disk' => '/rsrc/js/core/ToolTip.js', ), 'phabricator-transaction-view-css' => array( 'uri' => '/res/e797779e/rsrc/css/aphront/transaction.css', 'type' => 'css', 'requires' => array( ), 'disk' => '/rsrc/css/aphront/transaction.css', ), 'phabricator-ui-example-css' => array( 'uri' => '/res/376ab671/rsrc/css/application/uiexample/example.css', 'type' => 'css', 'requires' => array( ), 'disk' => '/rsrc/css/application/uiexample/example.css', ), 'phabricator-uiexample-javelin-view' => array( 'uri' => '/res/d42834b6/rsrc/js/application/uiexample/JavelinViewExample.js', 'type' => 'js', 'requires' => array( 0 => 'javelin-install', 1 => 'javelin-dom', 2 => 'javelin-view', ), 'disk' => '/rsrc/js/application/uiexample/JavelinViewExample.js', ), 'phabricator-uiexample-reactor-button' => array( 'uri' => '/res/6bfe4f05/rsrc/js/application/uiexample/ReactorButtonExample.js', 'type' => 'js', 'requires' => array( 0 => 'javelin-install', 1 => 'javelin-dom', 2 => 'javelin-util', 3 => 'javelin-dynval', 4 => 'javelin-reactor-dom', ), 'disk' => '/rsrc/js/application/uiexample/ReactorButtonExample.js', ), 'phabricator-uiexample-reactor-checkbox' => array( 'uri' => '/res/3e8b30ac/rsrc/js/application/uiexample/ReactorCheckboxExample.js', 'type' => 'js', 'requires' => array( 0 => 'javelin-install', 1 => 'javelin-dom', 2 => 'javelin-reactor-dom', ), 'disk' => '/rsrc/js/application/uiexample/ReactorCheckboxExample.js', ), 'phabricator-uiexample-reactor-focus' => array( 'uri' => '/res/d8f3b56e/rsrc/js/application/uiexample/ReactorFocusExample.js', 'type' => 'js', 'requires' => array( 0 => 'javelin-install', 1 => 'javelin-dom', 2 => 'javelin-reactor-dom', ), 'disk' => '/rsrc/js/application/uiexample/ReactorFocusExample.js', ), 'phabricator-uiexample-reactor-input' => array( 'uri' => '/res/936352d9/rsrc/js/application/uiexample/ReactorInputExample.js', 'type' => 'js', 'requires' => array( 0 => 'javelin-install', 1 => 'javelin-reactor-dom', 2 => 'javelin-view-html', 3 => 'javelin-view-interpreter', 4 => 'javelin-view-renderer', ), 'disk' => '/rsrc/js/application/uiexample/ReactorInputExample.js', ), 'phabricator-uiexample-reactor-mouseover' => array( 'uri' => '/res/031a9f4f/rsrc/js/application/uiexample/ReactorMouseoverExample.js', 'type' => 'js', 'requires' => array( 0 => 'javelin-install', 1 => 'javelin-dom', 2 => 'javelin-reactor-dom', ), 'disk' => '/rsrc/js/application/uiexample/ReactorMouseoverExample.js', ), 'phabricator-uiexample-reactor-radio' => array( 'uri' => '/res/208c58e3/rsrc/js/application/uiexample/ReactorRadioExample.js', 'type' => 'js', 'requires' => array( 0 => 'javelin-install', 1 => 'javelin-dom', 2 => 'javelin-reactor-dom', ), 'disk' => '/rsrc/js/application/uiexample/ReactorRadioExample.js', ), 'phabricator-uiexample-reactor-select' => array( 'uri' => '/res/1b68a6db/rsrc/js/application/uiexample/ReactorSelectExample.js', 'type' => 'js', 'requires' => array( 0 => 'javelin-install', 1 => 'javelin-dom', 2 => 'javelin-reactor-dom', ), 'disk' => '/rsrc/js/application/uiexample/ReactorSelectExample.js', ), 'phabricator-uiexample-reactor-sendclass' => array( 'uri' => '/res/00cb3131/rsrc/js/application/uiexample/ReactorSendClassExample.js', 'type' => 'js', 'requires' => array( 0 => 'javelin-install', 1 => 'javelin-dom', 2 => 'javelin-reactor-dom', ), 'disk' => '/rsrc/js/application/uiexample/ReactorSendClassExample.js', ), 'phabricator-uiexample-reactor-sendproperties' => array( 'uri' => '/res/392f1e02/rsrc/js/application/uiexample/ReactorSendPropertiesExample.js', 'type' => 'js', 'requires' => array( 0 => 'javelin-install', 1 => 'javelin-dom', 2 => 'javelin-reactor-dom', ), 'disk' => '/rsrc/js/application/uiexample/ReactorSendPropertiesExample.js', ), 'phabricator-zindex-css' => array( 'uri' => '/res/b443d508/rsrc/css/core/z-index.css', 'type' => 'css', 'requires' => array( ), 'disk' => '/rsrc/css/core/z-index.css', ), 'phame-css' => array( 'uri' => '/res/405e77b8/rsrc/css/application/phame/phame.css', 'type' => 'css', 'requires' => array( ), 'disk' => '/rsrc/css/application/phame/phame.css', ), 'pholio-css' => array( 'uri' => '/res/e64264c9/rsrc/css/application/pholio/pholio.css', 'type' => 'css', 'requires' => array( ), 'disk' => '/rsrc/css/application/pholio/pholio.css', ), 'pholio-edit-css' => array( 'uri' => '/res/04013652/rsrc/css/application/pholio/pholio-edit.css', 'type' => 'css', 'requires' => array( ), 'disk' => '/rsrc/css/application/pholio/pholio-edit.css', ), 'pholio-inline-comments-css' => array( 'uri' => '/res/67e2f18c/rsrc/css/application/pholio/pholio-inline-comments.css', 'type' => 'css', 'requires' => array( ), 'disk' => '/rsrc/css/application/pholio/pholio-inline-comments.css', ), 'phortune-credit-card-form' => array( 'uri' => '/res/bc948778/rsrc/js/application/phortune/phortune-credit-card-form.js', 'type' => 'js', 'requires' => array( 0 => 'javelin-install', 1 => 'javelin-dom', 2 => 'javelin-json', 3 => 'javelin-workflow', 4 => 'javelin-util', ), 'disk' => '/rsrc/js/application/phortune/phortune-credit-card-form.js', ), 'phortune-credit-card-form-css' => array( 'uri' => '/res/563c8c6d/rsrc/css/application/phortune/phortune-credit-card-form.css', 'type' => 'css', 'requires' => array( ), 'disk' => '/rsrc/css/application/phortune/phortune-credit-card-form.css', ), 'phrequent-css' => array( 'uri' => '/res/e2f09149/rsrc/css/application/phrequent/phrequent.css', 'type' => 'css', 'requires' => array( ), 'disk' => '/rsrc/css/application/phrequent/phrequent.css', ), 'phriction-document-css' => array( 'uri' => '/res/7ae003b1/rsrc/css/application/phriction/phriction-document-css.css', 'type' => 'css', 'requires' => array( ), 'disk' => '/rsrc/css/application/phriction/phriction-document-css.css', ), 'phui-box-css' => array( 'uri' => '/res/cd1b04cf/rsrc/css/phui/phui-box.css', 'type' => 'css', 'requires' => array( ), 'disk' => '/rsrc/css/phui/phui-box.css', ), 'phui-button-css' => array( 'uri' => '/res/abf52ae9/rsrc/css/phui/phui-button.css', 'type' => 'css', 'requires' => array( ), 'disk' => '/rsrc/css/phui/phui-button.css', ), 'phui-document-view-css' => array( 'uri' => '/res/cac7a825/rsrc/css/phui/phui-document.css', 'type' => 'css', 'requires' => array( ), 'disk' => '/rsrc/css/phui/phui-document.css', ), 'phui-feed-story-css' => array( 'uri' => '/res/8f28c686/rsrc/css/phui/phui-feed-story.css', 'type' => 'css', 'requires' => array( ), 'disk' => '/rsrc/css/phui/phui-feed-story.css', ), 'phui-form-css' => array( 'uri' => '/res/29b48d06/rsrc/css/phui/phui-form.css', 'type' => 'css', 'requires' => array( ), 'disk' => '/rsrc/css/phui/phui-form.css', ), 'phui-form-view-css' => array( - 'uri' => '/res/157ddd8b/rsrc/css/phui/phui-form-view.css', + 'uri' => '/res/3621b05d/rsrc/css/phui/phui-form-view.css', 'type' => 'css', 'requires' => array( ), 'disk' => '/rsrc/css/phui/phui-form-view.css', ), 'phui-header-view-css' => array( 'uri' => '/res/d6ca0939/rsrc/css/phui/phui-header-view.css', 'type' => 'css', 'requires' => array( ), 'disk' => '/rsrc/css/phui/phui-header-view.css', ), 'phui-icon-view-css' => array( 'uri' => '/res/28fb5ae5/rsrc/css/phui/phui-icon.css', 'type' => 'css', 'requires' => array( ), 'disk' => '/rsrc/css/phui/phui-icon.css', ), 'phui-info-panel-css' => array( - 'uri' => '/res/0a9c55c3/rsrc/css/phui/phui-info-panel.css', + 'uri' => '/res/e0ba8d04/rsrc/css/phui/phui-info-panel.css', 'type' => 'css', 'requires' => array( ), 'disk' => '/rsrc/css/phui/phui-info-panel.css', ), 'phui-list-view-css' => array( 'uri' => '/res/fbf42225/rsrc/css/phui/phui-list.css', 'type' => 'css', 'requires' => array( ), 'disk' => '/rsrc/css/phui/phui-list.css', ), 'phui-object-box-css' => array( 'uri' => '/res/8504279f/rsrc/css/phui/phui-object-box.css', 'type' => 'css', 'requires' => array( ), 'disk' => '/rsrc/css/phui/phui-object-box.css', ), 'phui-object-item-list-view-css' => array( 'uri' => '/res/c3a0ea74/rsrc/css/phui/phui-object-item-list-view.css', 'type' => 'css', 'requires' => array( ), 'disk' => '/rsrc/css/phui/phui-object-item-list-view.css', ), 'phui-pinboard-view-css' => array( 'uri' => '/res/f791ea99/rsrc/css/phui/phui-pinboard-view.css', 'type' => 'css', 'requires' => array( ), 'disk' => '/rsrc/css/phui/phui-pinboard-view.css', ), 'phui-property-list-view-css' => array( 'uri' => '/res/dc22cea9/rsrc/css/phui/phui-property-list-view.css', 'type' => 'css', 'requires' => array( ), 'disk' => '/rsrc/css/phui/phui-property-list-view.css', ), 'phui-remarkup-preview-css' => array( 'uri' => '/res/50fa4178/rsrc/css/phui/phui-remarkup-preview.css', 'type' => 'css', 'requires' => array( ), 'disk' => '/rsrc/css/phui/phui-remarkup-preview.css', ), 'phui-spacing-css' => array( 'uri' => '/res/28891fd3/rsrc/css/phui/phui-spacing.css', 'type' => 'css', 'requires' => array( ), 'disk' => '/rsrc/css/phui/phui-spacing.css', ), 'phui-status-list-view-css' => array( 'uri' => '/res/3410386e/rsrc/css/phui/phui-status.css', 'type' => 'css', 'requires' => array( ), 'disk' => '/rsrc/css/phui/phui-status.css', ), 'phui-text-css' => array( 'uri' => '/res/63e53cac/rsrc/css/phui/phui-text.css', 'type' => 'css', 'requires' => array( ), 'disk' => '/rsrc/css/phui/phui-text.css', ), 'phui-workboard-view-css' => array( 'uri' => '/res/445c7c7e/rsrc/css/phui/phui-workboard-view.css', 'type' => 'css', 'requires' => array( ), 'disk' => '/rsrc/css/phui/phui-workboard-view.css', ), 'phui-workpanel-view-css' => array( 'uri' => '/res/a81825b2/rsrc/css/phui/phui-workpanel-view.css', 'type' => 'css', 'requires' => array( ), 'disk' => '/rsrc/css/phui/phui-workpanel-view.css', ), 'policy-css' => array( 'uri' => '/res/51325bff/rsrc/css/application/policy/policy.css', 'type' => 'css', 'requires' => array( ), 'disk' => '/rsrc/css/application/policy/policy.css', ), 'policy-edit-css' => array( 'uri' => '/res/1e2a2b5e/rsrc/css/application/policy/policy-edit.css', 'type' => 'css', 'requires' => array( ), 'disk' => '/rsrc/css/application/policy/policy-edit.css', ), 'ponder-comment-table-css' => array( 'uri' => '/res/4aa4b865/rsrc/css/application/ponder/comments.css', 'type' => 'css', 'requires' => array( ), 'disk' => '/rsrc/css/application/ponder/comments.css', ), 'ponder-feed-view-css' => array( 'uri' => '/res/cab09075/rsrc/css/application/ponder/feed.css', 'type' => 'css', 'requires' => array( ), 'disk' => '/rsrc/css/application/ponder/feed.css', ), 'ponder-post-css' => array( 'uri' => '/res/013b9e2c/rsrc/css/application/ponder/post.css', 'type' => 'css', 'requires' => array( ), 'disk' => '/rsrc/css/application/ponder/post.css', ), 'ponder-vote-css' => array( 'uri' => '/res/6bbe8538/rsrc/css/application/ponder/vote.css', 'type' => 'css', 'requires' => array( ), 'disk' => '/rsrc/css/application/ponder/vote.css', ), 'raphael-core' => array( 'uri' => '/res/5dc5e17c/rsrc/externals/raphael/raphael.js', 'type' => 'js', 'requires' => array( ), 'disk' => '/rsrc/externals/raphael/raphael.js', ), 'raphael-g' => array( 'uri' => '/res/229b89a1/rsrc/externals/raphael/g.raphael.js', 'type' => 'js', 'requires' => array( ), 'disk' => '/rsrc/externals/raphael/g.raphael.js', ), 'raphael-g-line' => array( 'uri' => '/res/96da30f7/rsrc/externals/raphael/g.raphael.line.js', 'type' => 'js', 'requires' => array( ), 'disk' => '/rsrc/externals/raphael/g.raphael.line.js', ), 'releeph-branch' => array( 'uri' => '/res/6ad6420d/rsrc/css/application/releeph/releeph-branch.css', 'type' => 'css', 'requires' => array( ), 'disk' => '/rsrc/css/application/releeph/releeph-branch.css', ), 'releeph-colors' => array( 'uri' => '/res/dff4b26a/rsrc/css/application/releeph/releeph-colors.css', 'type' => 'css', 'requires' => array( ), 'disk' => '/rsrc/css/application/releeph/releeph-colors.css', ), 'releeph-core' => array( 'uri' => '/res/dad04eff/rsrc/css/application/releeph/releeph-core.css', 'type' => 'css', 'requires' => array( ), 'disk' => '/rsrc/css/application/releeph/releeph-core.css', ), 'releeph-intents' => array( 'uri' => '/res/4e73e9dd/rsrc/css/application/releeph/releeph-intents.css', 'type' => 'css', 'requires' => array( ), 'disk' => '/rsrc/css/application/releeph/releeph-intents.css', ), 'releeph-preview-branch' => array( 'uri' => '/res/65e5dece/rsrc/css/application/releeph/releeph-preview-branch.css', 'type' => 'css', 'requires' => array( ), 'disk' => '/rsrc/css/application/releeph/releeph-preview-branch.css', ), 'releeph-project' => array( 'uri' => '/res/b9376e59/rsrc/css/application/releeph/releeph-project.css', 'type' => 'css', 'requires' => array( ), 'disk' => '/rsrc/css/application/releeph/releeph-project.css', ), 'releeph-request-differential-create-dialog' => array( 'uri' => '/res/4df30ce1/rsrc/css/application/releeph/releeph-request-differential-create-dialog.css', 'type' => 'css', 'requires' => array( ), 'disk' => '/rsrc/css/application/releeph/releeph-request-differential-create-dialog.css', ), 'releeph-request-typeahead-css' => array( 'uri' => '/res/9c9a1acf/rsrc/css/application/releeph/releeph-request-typeahead.css', 'type' => 'css', 'requires' => array( ), 'disk' => '/rsrc/css/application/releeph/releeph-request-typeahead.css', ), 'releeph-status' => array( 'uri' => '/res/588529df/rsrc/css/application/releeph/releeph-status.css', 'type' => 'css', 'requires' => array( ), 'disk' => '/rsrc/css/application/releeph/releeph-status.css', ), 'setup-issue-css' => array( 'uri' => '/res/135c19ed/rsrc/css/application/config/setup-issue.css', 'type' => 'css', 'requires' => array( ), 'disk' => '/rsrc/css/application/config/setup-issue.css', ), 'sprite-actions-css' => array( 'uri' => '/res/bd43efa8/rsrc/css/sprite-actions.css', 'type' => 'css', 'requires' => array( ), 'disk' => '/rsrc/css/sprite-actions.css', ), 'sprite-apps-css' => array( 'uri' => '/res/49414f73/rsrc/css/sprite-apps.css', 'type' => 'css', 'requires' => array( ), 'disk' => '/rsrc/css/sprite-apps.css', ), 'sprite-apps-large-css' => array( 'uri' => '/res/9b28c951/rsrc/css/sprite-apps-large.css', 'type' => 'css', 'requires' => array( ), 'disk' => '/rsrc/css/sprite-apps-large.css', ), 'sprite-apps-xlarge-css' => array( 'uri' => '/res/33a8e644/rsrc/css/sprite-apps-xlarge.css', 'type' => 'css', 'requires' => array( ), 'disk' => '/rsrc/css/sprite-apps-xlarge.css', ), 'sprite-conpherence-css' => array( 'uri' => '/res/f6793453/rsrc/css/sprite-conpherence.css', 'type' => 'css', 'requires' => array( ), 'disk' => '/rsrc/css/sprite-conpherence.css', ), 'sprite-docs-css' => array( 'uri' => '/res/b32f93bc/rsrc/css/sprite-docs.css', 'type' => 'css', 'requires' => array( ), 'disk' => '/rsrc/css/sprite-docs.css', ), 'sprite-gradient-css' => array( 'uri' => '/res/e31d9063/rsrc/css/sprite-gradient.css', 'type' => 'css', 'requires' => array( ), 'disk' => '/rsrc/css/sprite-gradient.css', ), 'sprite-icons-css' => array( 'uri' => '/res/612d8282/rsrc/css/sprite-icons.css', 'type' => 'css', 'requires' => array( ), 'disk' => '/rsrc/css/sprite-icons.css', ), 'sprite-login-css' => array( 'uri' => '/res/48dc427d/rsrc/css/sprite-login.css', 'type' => 'css', 'requires' => array( ), 'disk' => '/rsrc/css/sprite-login.css', ), 'sprite-menu-css' => array( 'uri' => '/res/764ab039/rsrc/css/sprite-menu.css', 'type' => 'css', 'requires' => array( ), 'disk' => '/rsrc/css/sprite-menu.css', ), 'sprite-minicons-css' => array( 'uri' => '/res/2dba70cd/rsrc/css/sprite-minicons.css', 'type' => 'css', 'requires' => array( ), 'disk' => '/rsrc/css/sprite-minicons.css', ), 'sprite-payments-css' => array( 'uri' => '/res/876697b6/rsrc/css/sprite-payments.css', 'type' => 'css', 'requires' => array( ), 'disk' => '/rsrc/css/sprite-payments.css', ), 'sprite-projects-css' => array( 'uri' => '/res/40eacbfb/rsrc/css/sprite-projects.css', 'type' => 'css', 'requires' => array( ), 'disk' => '/rsrc/css/sprite-projects.css', ), 'sprite-status-css' => array( 'uri' => '/res/c74fedbc/rsrc/css/sprite-status.css', 'type' => 'css', 'requires' => array( ), 'disk' => '/rsrc/css/sprite-status.css', ), 'sprite-tokens-css' => array( 'uri' => '/res/edb4e341/rsrc/css/sprite-tokens.css', 'type' => 'css', 'requires' => array( ), 'disk' => '/rsrc/css/sprite-tokens.css', ), 'syntax-highlighting-css' => array( 'uri' => '/res/db7c0e13/rsrc/css/core/syntax.css', 'type' => 'css', 'requires' => array( ), 'disk' => '/rsrc/css/core/syntax.css', ), 'tokens-css' => array( 'uri' => '/res/bbddf548/rsrc/css/application/tokens/tokens.css', 'type' => 'css', 'requires' => array( ), 'disk' => '/rsrc/css/application/tokens/tokens.css', ), ), array( 'packages' => array( - '8486b05c' => + '3b488eea' => array( 'name' => 'core.pkg.css', 'symbols' => array( 0 => 'phabricator-core-css', 1 => 'phabricator-zindex-css', 2 => 'phui-button-css', 3 => 'phabricator-standard-page-view', 4 => 'aphront-dialog-view-css', 5 => 'phui-form-view-css', 6 => 'aphront-panel-view-css', 7 => 'aphront-table-view-css', 8 => 'aphront-tokenizer-control-css', 9 => 'aphront-typeahead-control-css', 10 => 'aphront-list-filter-view-css', 11 => 'phabricator-jump-nav', 12 => 'phabricator-remarkup-css', 13 => 'syntax-highlighting-css', 14 => 'aphront-pager-view-css', 15 => 'phabricator-transaction-view-css', 16 => 'aphront-tooltip-css', 17 => 'phabricator-flag-css', 18 => 'aphront-error-view-css', 19 => 'sprite-icons-css', 20 => 'sprite-gradient-css', 21 => 'sprite-menu-css', 22 => 'sprite-apps-large-css', 23 => 'sprite-status-css', 24 => 'phabricator-main-menu-view', 25 => 'phabricator-notification-css', 26 => 'phabricator-notification-menu-css', 27 => 'lightbox-attachment-css', 28 => 'phui-header-view-css', 29 => 'phabricator-filetree-view-css', 30 => 'phabricator-nav-view-css', 31 => 'phabricator-side-menu-view-css', 32 => 'phabricator-crumbs-view-css', 33 => 'phui-object-item-list-view-css', 34 => 'global-drag-and-drop-css', 35 => 'phui-spacing-css', 36 => 'phui-form-css', 37 => 'phui-icon-view-css', 38 => 'phabricator-application-launch-view-css', 39 => 'phabricator-action-list-view-css', 40 => 'phui-property-list-view-css', 41 => 'phabricator-tag-view-css', 42 => 'phui-list-view-css', ), - 'uri' => '/res/pkg/8486b05c/core.pkg.css', + 'uri' => '/res/pkg/3b488eea/core.pkg.css', 'type' => 'css', ), '2c1dba03' => array( 'name' => 'core.pkg.js', 'symbols' => array( 0 => 'javelin-behavior-aphront-basic-tokenizer', 1 => 'javelin-behavior-workflow', 2 => 'javelin-behavior-aphront-form-disable-on-submit', 3 => 'phabricator-keyboard-shortcut-manager', 4 => 'phabricator-keyboard-shortcut', 5 => 'javelin-behavior-phabricator-keyboard-shortcuts', 6 => 'javelin-behavior-refresh-csrf', 7 => 'javelin-behavior-phabricator-watch-anchor', 8 => 'javelin-behavior-phabricator-autofocus', 9 => 'phabricator-menu-item', 10 => 'phabricator-dropdown-menu', 11 => 'phabricator-phtize', 12 => 'javelin-behavior-phabricator-oncopy', 13 => 'phabricator-tooltip', 14 => 'javelin-behavior-phabricator-tooltips', 15 => 'phabricator-prefab', 16 => 'javelin-behavior-device', 17 => 'javelin-behavior-toggle-class', 18 => 'javelin-behavior-lightbox-attachments', 19 => 'phabricator-busy', 20 => 'javelin-aphlict', 21 => 'phabricator-notification', 22 => 'javelin-behavior-aphlict-listen', 23 => 'javelin-behavior-phabricator-search-typeahead', 24 => 'javelin-behavior-konami', 25 => 'javelin-behavior-aphlict-dropdown', 26 => 'javelin-behavior-history-install', 27 => 'javelin-behavior-phabricator-gesture', 28 => 'javelin-behavior-phabricator-active-nav', 29 => 'javelin-behavior-phabricator-nav', 30 => 'javelin-behavior-phabricator-remarkup-assist', 31 => 'phabricator-textareautils', 32 => 'phabricator-file-upload', 33 => 'javelin-behavior-global-drag-and-drop', 34 => 'javelin-behavior-phabricator-reveal-content', 35 => 'phabricator-hovercard', 36 => 'javelin-behavior-phabricator-hovercards', 37 => 'javelin-color', 38 => 'javelin-fx', ), 'uri' => '/res/pkg/2c1dba03/core.pkg.js', 'type' => 'js', ), '4ccfeb47' => array( 'name' => 'darkconsole.pkg.js', 'symbols' => array( 0 => 'javelin-behavior-dark-console', 1 => 'javelin-behavior-error-log', ), 'uri' => '/res/pkg/4ccfeb47/darkconsole.pkg.js', 'type' => 'js', ), 'f87db3d0' => array( 'name' => 'differential.pkg.css', 'symbols' => array( 0 => 'differential-core-view-css', 1 => 'differential-changeset-view-css', 2 => 'differential-results-table-css', 3 => 'differential-revision-history-css', 4 => 'differential-revision-list-css', 5 => 'differential-table-of-contents-css', 6 => 'differential-revision-comment-css', 7 => 'differential-revision-add-comment-css', 8 => 'differential-revision-comment-list-css', 9 => 'phabricator-object-selector-css', 10 => 'phabricator-content-source-view-css', 11 => 'differential-local-commits-view-css', 12 => 'inline-comment-summary-css', ), 'uri' => '/res/pkg/f87db3d0/differential.pkg.css', 'type' => 'css', ), '5e9e5c4e' => array( 'name' => 'differential.pkg.js', 'symbols' => array( 0 => 'phabricator-drag-and-drop-file-upload', 1 => 'phabricator-shaped-request', 2 => 'javelin-behavior-differential-feedback-preview', 3 => 'javelin-behavior-differential-edit-inline-comments', 4 => 'javelin-behavior-differential-populate', 5 => 'javelin-behavior-differential-show-more', 6 => 'javelin-behavior-differential-diff-radios', 7 => 'javelin-behavior-differential-accept-with-errors', 8 => 'javelin-behavior-differential-comment-jump', 9 => 'javelin-behavior-differential-add-reviewers-and-ccs', 10 => 'javelin-behavior-differential-keyboard-navigation', 11 => 'javelin-behavior-aphront-drag-and-drop-textarea', 12 => 'javelin-behavior-phabricator-object-selector', 13 => 'javelin-behavior-repository-crossreference', 14 => 'javelin-behavior-load-blame', 15 => 'differential-inline-comment-editor', 16 => 'javelin-behavior-differential-dropdown-menus', 17 => 'javelin-behavior-differential-toggle-files', 18 => 'javelin-behavior-differential-user-select', ), 'uri' => '/res/pkg/5e9e5c4e/differential.pkg.js', 'type' => 'js', ), '270f4eb4' => array( 'name' => 'diffusion.pkg.css', 'symbols' => array( 0 => 'diffusion-commit-view-css', 1 => 'diffusion-icons-css', ), 'uri' => '/res/pkg/270f4eb4/diffusion.pkg.css', 'type' => 'css', ), 96909266 => array( 'name' => 'diffusion.pkg.js', 'symbols' => array( 0 => 'javelin-behavior-diffusion-pull-lastmodified', 1 => 'javelin-behavior-diffusion-commit-graph', 2 => 'javelin-behavior-audit-preview', ), 'uri' => '/res/pkg/96909266/diffusion.pkg.js', 'type' => 'js', ), '3e3be199' => array( 'name' => 'javelin.pkg.js', 'symbols' => array( 0 => 'javelin-util', 1 => 'javelin-install', 2 => 'javelin-event', 3 => 'javelin-stratcom', 4 => 'javelin-behavior', 5 => 'javelin-resource', 6 => 'javelin-request', 7 => 'javelin-vector', 8 => 'javelin-dom', 9 => 'javelin-json', 10 => 'javelin-uri', 11 => 'javelin-workflow', 12 => 'javelin-mask', 13 => 'javelin-typeahead', 14 => 'javelin-typeahead-normalizer', 15 => 'javelin-typeahead-source', 16 => 'javelin-typeahead-preloaded-source', 17 => 'javelin-typeahead-ondemand-source', 18 => 'javelin-tokenizer', 19 => 'javelin-history', ), 'uri' => '/res/pkg/3e3be199/javelin.pkg.js', 'type' => 'js', ), 49898640 => array( 'name' => 'maniphest.pkg.css', 'symbols' => array( 0 => 'maniphest-task-summary-css', 1 => 'phabricator-project-tag-css', ), 'uri' => '/res/pkg/49898640/maniphest.pkg.css', 'type' => 'css', ), '0a694954' => array( 'name' => 'maniphest.pkg.js', 'symbols' => array( 0 => 'javelin-behavior-maniphest-batch-selector', 1 => 'javelin-behavior-maniphest-transaction-controls', 2 => 'javelin-behavior-maniphest-transaction-preview', 3 => 'javelin-behavior-maniphest-transaction-expand', 4 => 'javelin-behavior-maniphest-subpriority-editor', ), 'uri' => '/res/pkg/0a694954/maniphest.pkg.js', 'type' => 'js', ), ), 'reverse' => array( - 'aphront-dialog-view-css' => '8486b05c', - 'aphront-error-view-css' => '8486b05c', - 'aphront-list-filter-view-css' => '8486b05c', - 'aphront-pager-view-css' => '8486b05c', - 'aphront-panel-view-css' => '8486b05c', - 'aphront-table-view-css' => '8486b05c', - 'aphront-tokenizer-control-css' => '8486b05c', - 'aphront-tooltip-css' => '8486b05c', - 'aphront-typeahead-control-css' => '8486b05c', + 'aphront-dialog-view-css' => '3b488eea', + 'aphront-error-view-css' => '3b488eea', + 'aphront-list-filter-view-css' => '3b488eea', + 'aphront-pager-view-css' => '3b488eea', + 'aphront-panel-view-css' => '3b488eea', + 'aphront-table-view-css' => '3b488eea', + 'aphront-tokenizer-control-css' => '3b488eea', + 'aphront-tooltip-css' => '3b488eea', + 'aphront-typeahead-control-css' => '3b488eea', 'differential-changeset-view-css' => 'f87db3d0', 'differential-core-view-css' => 'f87db3d0', 'differential-inline-comment-editor' => '5e9e5c4e', 'differential-local-commits-view-css' => 'f87db3d0', 'differential-results-table-css' => 'f87db3d0', 'differential-revision-add-comment-css' => 'f87db3d0', 'differential-revision-comment-css' => 'f87db3d0', 'differential-revision-comment-list-css' => 'f87db3d0', 'differential-revision-history-css' => 'f87db3d0', 'differential-revision-list-css' => 'f87db3d0', 'differential-table-of-contents-css' => 'f87db3d0', 'diffusion-commit-view-css' => '270f4eb4', 'diffusion-icons-css' => '270f4eb4', - 'global-drag-and-drop-css' => '8486b05c', + 'global-drag-and-drop-css' => '3b488eea', 'inline-comment-summary-css' => 'f87db3d0', 'javelin-aphlict' => '2c1dba03', 'javelin-behavior' => '3e3be199', 'javelin-behavior-aphlict-dropdown' => '2c1dba03', 'javelin-behavior-aphlict-listen' => '2c1dba03', 'javelin-behavior-aphront-basic-tokenizer' => '2c1dba03', 'javelin-behavior-aphront-drag-and-drop-textarea' => '5e9e5c4e', 'javelin-behavior-aphront-form-disable-on-submit' => '2c1dba03', 'javelin-behavior-audit-preview' => '96909266', 'javelin-behavior-dark-console' => '4ccfeb47', 'javelin-behavior-device' => '2c1dba03', 'javelin-behavior-differential-accept-with-errors' => '5e9e5c4e', 'javelin-behavior-differential-add-reviewers-and-ccs' => '5e9e5c4e', 'javelin-behavior-differential-comment-jump' => '5e9e5c4e', 'javelin-behavior-differential-diff-radios' => '5e9e5c4e', 'javelin-behavior-differential-dropdown-menus' => '5e9e5c4e', 'javelin-behavior-differential-edit-inline-comments' => '5e9e5c4e', 'javelin-behavior-differential-feedback-preview' => '5e9e5c4e', 'javelin-behavior-differential-keyboard-navigation' => '5e9e5c4e', 'javelin-behavior-differential-populate' => '5e9e5c4e', 'javelin-behavior-differential-show-more' => '5e9e5c4e', 'javelin-behavior-differential-toggle-files' => '5e9e5c4e', 'javelin-behavior-differential-user-select' => '5e9e5c4e', 'javelin-behavior-diffusion-commit-graph' => '96909266', 'javelin-behavior-diffusion-pull-lastmodified' => '96909266', 'javelin-behavior-error-log' => '4ccfeb47', 'javelin-behavior-global-drag-and-drop' => '2c1dba03', 'javelin-behavior-history-install' => '2c1dba03', 'javelin-behavior-konami' => '2c1dba03', 'javelin-behavior-lightbox-attachments' => '2c1dba03', 'javelin-behavior-load-blame' => '5e9e5c4e', 'javelin-behavior-maniphest-batch-selector' => '0a694954', 'javelin-behavior-maniphest-subpriority-editor' => '0a694954', 'javelin-behavior-maniphest-transaction-controls' => '0a694954', 'javelin-behavior-maniphest-transaction-expand' => '0a694954', 'javelin-behavior-maniphest-transaction-preview' => '0a694954', 'javelin-behavior-phabricator-active-nav' => '2c1dba03', 'javelin-behavior-phabricator-autofocus' => '2c1dba03', 'javelin-behavior-phabricator-gesture' => '2c1dba03', 'javelin-behavior-phabricator-hovercards' => '2c1dba03', 'javelin-behavior-phabricator-keyboard-shortcuts' => '2c1dba03', 'javelin-behavior-phabricator-nav' => '2c1dba03', 'javelin-behavior-phabricator-object-selector' => '5e9e5c4e', 'javelin-behavior-phabricator-oncopy' => '2c1dba03', 'javelin-behavior-phabricator-remarkup-assist' => '2c1dba03', 'javelin-behavior-phabricator-reveal-content' => '2c1dba03', 'javelin-behavior-phabricator-search-typeahead' => '2c1dba03', 'javelin-behavior-phabricator-tooltips' => '2c1dba03', 'javelin-behavior-phabricator-watch-anchor' => '2c1dba03', 'javelin-behavior-refresh-csrf' => '2c1dba03', 'javelin-behavior-repository-crossreference' => '5e9e5c4e', 'javelin-behavior-toggle-class' => '2c1dba03', 'javelin-behavior-workflow' => '2c1dba03', 'javelin-color' => '2c1dba03', 'javelin-dom' => '3e3be199', 'javelin-event' => '3e3be199', 'javelin-fx' => '2c1dba03', 'javelin-history' => '3e3be199', 'javelin-install' => '3e3be199', 'javelin-json' => '3e3be199', 'javelin-mask' => '3e3be199', 'javelin-request' => '3e3be199', 'javelin-resource' => '3e3be199', 'javelin-stratcom' => '3e3be199', 'javelin-tokenizer' => '3e3be199', 'javelin-typeahead' => '3e3be199', 'javelin-typeahead-normalizer' => '3e3be199', 'javelin-typeahead-ondemand-source' => '3e3be199', 'javelin-typeahead-preloaded-source' => '3e3be199', 'javelin-typeahead-source' => '3e3be199', 'javelin-uri' => '3e3be199', 'javelin-util' => '3e3be199', 'javelin-vector' => '3e3be199', 'javelin-workflow' => '3e3be199', - 'lightbox-attachment-css' => '8486b05c', + 'lightbox-attachment-css' => '3b488eea', 'maniphest-task-summary-css' => '49898640', - 'phabricator-action-list-view-css' => '8486b05c', - 'phabricator-application-launch-view-css' => '8486b05c', + 'phabricator-action-list-view-css' => '3b488eea', + 'phabricator-application-launch-view-css' => '3b488eea', 'phabricator-busy' => '2c1dba03', 'phabricator-content-source-view-css' => 'f87db3d0', - 'phabricator-core-css' => '8486b05c', - 'phabricator-crumbs-view-css' => '8486b05c', + 'phabricator-core-css' => '3b488eea', + 'phabricator-crumbs-view-css' => '3b488eea', 'phabricator-drag-and-drop-file-upload' => '5e9e5c4e', 'phabricator-dropdown-menu' => '2c1dba03', 'phabricator-file-upload' => '2c1dba03', - 'phabricator-filetree-view-css' => '8486b05c', - 'phabricator-flag-css' => '8486b05c', + 'phabricator-filetree-view-css' => '3b488eea', + 'phabricator-flag-css' => '3b488eea', 'phabricator-hovercard' => '2c1dba03', - 'phabricator-jump-nav' => '8486b05c', + 'phabricator-jump-nav' => '3b488eea', 'phabricator-keyboard-shortcut' => '2c1dba03', 'phabricator-keyboard-shortcut-manager' => '2c1dba03', - 'phabricator-main-menu-view' => '8486b05c', + 'phabricator-main-menu-view' => '3b488eea', 'phabricator-menu-item' => '2c1dba03', - 'phabricator-nav-view-css' => '8486b05c', + 'phabricator-nav-view-css' => '3b488eea', 'phabricator-notification' => '2c1dba03', - 'phabricator-notification-css' => '8486b05c', - 'phabricator-notification-menu-css' => '8486b05c', + 'phabricator-notification-css' => '3b488eea', + 'phabricator-notification-menu-css' => '3b488eea', 'phabricator-object-selector-css' => 'f87db3d0', 'phabricator-phtize' => '2c1dba03', 'phabricator-prefab' => '2c1dba03', 'phabricator-project-tag-css' => '49898640', - 'phabricator-remarkup-css' => '8486b05c', + 'phabricator-remarkup-css' => '3b488eea', 'phabricator-shaped-request' => '5e9e5c4e', - 'phabricator-side-menu-view-css' => '8486b05c', - 'phabricator-standard-page-view' => '8486b05c', - 'phabricator-tag-view-css' => '8486b05c', + 'phabricator-side-menu-view-css' => '3b488eea', + 'phabricator-standard-page-view' => '3b488eea', + 'phabricator-tag-view-css' => '3b488eea', 'phabricator-textareautils' => '2c1dba03', 'phabricator-tooltip' => '2c1dba03', - 'phabricator-transaction-view-css' => '8486b05c', - 'phabricator-zindex-css' => '8486b05c', - 'phui-button-css' => '8486b05c', - 'phui-form-css' => '8486b05c', - 'phui-form-view-css' => '8486b05c', - 'phui-header-view-css' => '8486b05c', - 'phui-icon-view-css' => '8486b05c', - 'phui-list-view-css' => '8486b05c', - 'phui-object-item-list-view-css' => '8486b05c', - 'phui-property-list-view-css' => '8486b05c', - 'phui-spacing-css' => '8486b05c', - 'sprite-apps-large-css' => '8486b05c', - 'sprite-gradient-css' => '8486b05c', - 'sprite-icons-css' => '8486b05c', - 'sprite-menu-css' => '8486b05c', - 'sprite-status-css' => '8486b05c', - 'syntax-highlighting-css' => '8486b05c', + 'phabricator-transaction-view-css' => '3b488eea', + 'phabricator-zindex-css' => '3b488eea', + 'phui-button-css' => '3b488eea', + 'phui-form-css' => '3b488eea', + 'phui-form-view-css' => '3b488eea', + 'phui-header-view-css' => '3b488eea', + 'phui-icon-view-css' => '3b488eea', + 'phui-list-view-css' => '3b488eea', + 'phui-object-item-list-view-css' => '3b488eea', + 'phui-property-list-view-css' => '3b488eea', + 'phui-spacing-css' => '3b488eea', + 'sprite-apps-large-css' => '3b488eea', + 'sprite-gradient-css' => '3b488eea', + 'sprite-icons-css' => '3b488eea', + 'sprite-menu-css' => '3b488eea', + 'sprite-status-css' => '3b488eea', + 'syntax-highlighting-css' => '3b488eea', ), )); diff --git a/src/applications/diffusion/application/PhabricatorApplicationDiffusion.php b/src/applications/diffusion/application/PhabricatorApplicationDiffusion.php index 8bf0ada03..1cf610173 100644 --- a/src/applications/diffusion/application/PhabricatorApplicationDiffusion.php +++ b/src/applications/diffusion/application/PhabricatorApplicationDiffusion.php @@ -1,103 +1,104 @@ [A-Z]+)(?P[a-z0-9]+)' => 'DiffusionCommitController', '/diffusion/' => array( '(?:query/(?P[^/]+)/)?' => 'DiffusionRepositoryListController', 'create/' => 'DiffusionRepositoryCreateController', '(?P[A-Z]+)/' => array( '' => 'DiffusionRepositoryController', 'repository/(?P.*)' => 'DiffusionRepositoryController', 'change/(?P.*)' => 'DiffusionChangeController', 'history/(?P.*)' => 'DiffusionHistoryController', 'browse/(?P.*)' => 'DiffusionBrowseMainController', 'lastmodified/(?P.*)' => 'DiffusionLastModifiedController', 'diff/' => 'DiffusionDiffController', 'tags/(?P.*)' => 'DiffusionTagListController', 'branches/(?P.*)' => 'DiffusionBranchTableController', 'lint/(?P.*)' => 'DiffusionLintController', 'commit/(?P[a-z0-9]+)/branches/' => 'DiffusionCommitBranchesController', 'commit/(?P[a-z0-9]+)/tags/' => 'DiffusionCommitTagsController', 'commit/(?P[a-z0-9]+)/edit/' => 'DiffusionCommitEditController', 'edit/' => array( '' => 'DiffusionRepositoryEditController', 'basic/' => 'DiffusionRepositoryEditBasicController', 'encoding/' => 'DiffusionRepositoryEditEncodingController', 'activate/' => 'DiffusionRepositoryEditActivateController', 'policy/' => 'DiffusionRepositoryEditPolicyController', 'branches/' => 'DiffusionRepositoryEditBranchesController', 'subversion/' => 'DiffusionRepositoryEditSubversionController', 'actions/' => 'DiffusionRepositoryEditActionsController', + '(?Premote)/' => 'DiffusionRepositoryCreateController', ), ), 'inline/' => array( 'edit/(?P[^/]+)/' => 'DiffusionInlineCommentController', 'preview/(?P[^/]+)/' => 'DiffusionInlineCommentPreviewController', ), 'services/' => array( 'path/' => array( 'complete/' => 'DiffusionPathCompleteController', 'validate/' => 'DiffusionPathValidateController', ), ), 'symbol/(?P[^/]+)/' => 'DiffusionSymbolController', 'external/' => 'DiffusionExternalController', 'lint/' => 'DiffusionLintController', ), ); } public function getApplicationGroup() { return self::GROUP_CORE; } public function getApplicationOrder() { return 0.120; } } diff --git a/src/applications/diffusion/controller/DiffusionRepositoryCreateController.php b/src/applications/diffusion/controller/DiffusionRepositoryCreateController.php index f395b7256..22f56674c 100644 --- a/src/applications/diffusion/controller/DiffusionRepositoryCreateController.php +++ b/src/applications/diffusion/controller/DiffusionRepositoryCreateController.php @@ -1,544 +1,693 @@ edit = idx($data, 'edit'); + } + public function processRequest() { $request = $this->getRequest(); $viewer = $request->getUser(); + // NOTE: We can end up here via either "Create Repository" or via + // "Edit Remote". In the latter case, we show only a few of the pages. + + $repository = null; + if ($this->edit) { + $repository = $this->getDiffusionRequest()->getRepository(); + + // Make sure we have CAN_EDIT. + id(new PhabricatorRepositoryQuery()) + ->setViewer($viewer) + ->withIDs(array($repository->getID())) + ->requireCapabilities( + array( + PhabricatorPolicyCapability::CAN_VIEW, + PhabricatorPolicyCapability::CAN_EDIT, + )) + ->executeOne(); + + $this->setRepository($repository); + + $cancel_uri = $this->getRepositoryControllerURI($repository, 'edit/'); + } else { + $cancel_uri = $this->getApplicationURI(); + } + $form = id(new PHUIPagedFormView()) ->setUser($viewer) - ->addPage('vcs', $this->buildVCSPage()) - ->addPage('name', $this->buildNamePage()) - ->addPage('auth', $this->buildAuthPage()) - ->addPage('done', $this->buildDonePage()); + ->setCancelURI($cancel_uri); + + switch ($this->edit) { + case 'remote': + $title = pht('Edit Remote'); + $form + ->addPage('remote-uri', $this->buildRemoteURIPage()) + ->addPage('auth', $this->buildAuthPage()); + break; + default: + $title = pht('Import Repository'); + $form + ->addPage('vcs', $this->buildVCSPage()) + ->addPage('name', $this->buildNamePage()) + ->addPage('remote-uri', $this->buildRemoteURIPage()) + ->addPage('auth', $this->buildAuthPage()) + ->addPage('done', $this->buildDonePage()); + break; + } if ($request->isFormPost()) { $form->readFromRequest($request); if ($form->isComplete()) { - // TODO: This exception is heartwarming but should probably take more - // substantive actions. - throw new Exception("GOOD JOB AT FORM"); + + if ($this->edit != 'remote') { + // TODO: This exception is heartwarming but should probably take more + // substantive actions. + throw new Exception("GOOD JOB AT FORM"); + } + + $template = id(new PhabricatorRepositoryTransaction()); + + $type_remote_uri = PhabricatorRepositoryTransaction::TYPE_REMOTE_URI; + $type_ssh_login = PhabricatorRepositoryTransaction::TYPE_SSH_LOGIN; + $type_ssh_key = PhabricatorRepositoryTransaction::TYPE_SSH_KEY; + $type_ssh_keyfile = PhabricatorRepositoryTransaction::TYPE_SSH_KEYFILE; + $type_http_login = PhabricatorRepositoryTransaction::TYPE_HTTP_LOGIN; + $type_http_pass = PhabricatorRepositoryTransaction::TYPE_HTTP_PASS; + + $xactions = array(); + + $xactions[] = id(clone $template) + ->setTransactionType($type_remote_uri) + ->setNewValue( + $form->getPage('remote-uri')->getControl('remoteURI')->getValue()); + + $xactions[] = id(clone $template) + ->setTransactionType($type_ssh_login) + ->setNewValue( + $form->getPage('auth')->getControl('ssh-login')->getValue()); + + $xactions[] = id(clone $template) + ->setTransactionType($type_ssh_key) + ->setNewValue( + $form->getPage('auth')->getControl('ssh-key')->getValue()); + + $xactions[] = id(clone $template) + ->setTransactionType($type_ssh_keyfile) + ->setNewValue( + $form->getPage('auth')->getControl('ssh-keyfile')->getValue()); + + $xactions[] = id(clone $template) + ->setTransactionType($type_http_login) + ->setNewValue( + $form->getPage('auth')->getControl('http-login')->getValue()); + + $xactions[] = id(clone $template) + ->setTransactionType($type_http_pass) + ->setNewValue( + $form->getPage('auth')->getControl('http-pass')->getValue()); + + id(new PhabricatorRepositoryEditor()) + ->setContinueOnNoEffect(true) + ->setContentSourceFromRequest($request) + ->setActor($viewer) + ->applyTransactions($repository, $xactions); + + $repo_uri = $this->getRepositoryControllerURI($repository, 'edit/'); + return id(new AphrontRedirectResponse())->setURI($repo_uri); } } else { - $form->readFromObject(null); + $dict = array(); + if ($repository) { + $dict = array( + 'remoteURI' => $repository->getRemoteURI(), + 'ssh-login' => $repository->getDetail('ssh-login'), + 'ssh-key' => $repository->getDetail('ssh-key'), + 'ssh-keyfile' => $repository->getDetail('ssh-keyfile'), + 'http-login' => $repository->getDetail('http-login'), + 'http-pass' => $repository->getDetail('http-pass'), + ); + } + $form->readFromObject($dict); } - $title = pht('Import Repository'); - $crumbs = $this->buildCrumbs(); $crumbs->addCrumb( id(new PhabricatorCrumbView()) ->setName($title)); return $this->buildApplicationPage( array( $crumbs, $form, ), array( 'title' => $title, 'device' => true, )); } /* -( Page: VCS Type )----------------------------------------------------- */ private function buildVCSPage() { return id(new PHUIFormPageView()) ->setPageName(pht('Repository Type')) ->setUser($this->getRequest()->getUser()) ->setValidateFormPageCallback(array($this, 'validateVCSPage')) ->addControl( id(new AphrontFormRadioButtonControl()) ->setName('vcs') ->setLabel(pht('Type')) ->addButton( PhabricatorRepositoryType::REPOSITORY_TYPE_GIT, pht('Git'), pht( 'Import a Git repository (for example, a repository hosted '. 'on GitHub).')) ->addButton( PhabricatorRepositoryType::REPOSITORY_TYPE_MERCURIAL, pht('Mercurial'), pht( 'Import a Mercurial repository (for example, a repository '. 'hosted on Bitbucket).')) ->addButton( PhabricatorRepositoryType::REPOSITORY_TYPE_SVN, pht('Subversion'), pht('Import a Subversion repository.')) ->addButton( PhabricatorRepositoryType::REPOSITORY_TYPE_PERFORCE, pht('Perforce'), pht( 'Perforce is not directly supported, but you can import '. 'a Perforce repository as a Git repository using %s.', phutil_tag( 'a', array( 'href' => 'http://www.perforce.com/product/components/git-fusion', 'target' => '_blank', ), pht('Perforce Git Fusion'))), 'disabled', $disabled = true)); } public function validateVCSPage(PHUIFormPageView $page) { $valid = array( PhabricatorRepositoryType::REPOSITORY_TYPE_GIT => true, PhabricatorRepositoryType::REPOSITORY_TYPE_MERCURIAL => true, PhabricatorRepositoryType::REPOSITORY_TYPE_SVN => true, ); $c_vcs = $page->getControl('vcs'); $v_vcs = $c_vcs->getValue(); if (!$v_vcs) { $c_vcs->setError(pht('Required')); $page->addPageError( pht('You must select a version control system.')); } else if (empty($valid[$v_vcs])) { $c_vcs->setError(pht('Invalid')); $page->addPageError( pht('You must select a valid version control system.')); } return $c_vcs->isValid(); } /* -( Page: Name and Callsign )-------------------------------------------- */ private function buildNamePage() { return id(new PHUIFormPageView()) ->setUser($this->getRequest()->getUser()) ->setPageName(pht('Repository Name and Location')) ->setValidateFormPageCallback(array($this, 'validateNamePage')) - ->setAdjustFormPageCallback(array($this, 'adjustNamePage')) ->addRemarkupInstructions( pht( '**Choose a human-readable name for this repository**, like '. '"CompanyName Mobile App" or "CompanyName Backend Server". You '. 'can change this later.')) ->addControl( id(new AphrontFormTextControl()) ->setName('name') ->setLabel(pht('Name')) ->setCaption(pht('Human-readable repository name.'))) ->addRemarkupInstructions( pht( '**Choose a "Callsign" for the repository.** This is a short, '. 'unique string which identifies commits elsewhere in Phabricator. '. 'For example, you might use `M` for your mobile app repository '. 'and `B` for your backend repository.'. "\n\n". '**Callsigns must be UPPERCASE**, and can not be edited after the '. 'repository is created. Generally, you should choose short '. 'callsigns.')) ->addControl( id(new AphrontFormTextControl()) ->setName('callsign') ->setLabel(pht('Callsign')) - ->setCaption(pht('Short UPPERCASE identifier.'))) + ->setCaption(pht('Short UPPERCASE identifier.'))); + } + + public function validateNamePage(PHUIFormPageView $page) { + $c_name = $page->getControl('name'); + $v_name = $c_name->getValue(); + if (!strlen($v_name)) { + $c_name->setError(pht('Required')); + $page->addPageError( + pht('You must choose a name for this repository.')); + } + + $c_call = $page->getControl('callsign'); + $v_call = $c_call->getValue(); + if (!strlen($v_call)) { + $c_call->setError(pht('Required')); + $page->addPageError( + pht('You must choose a callsign for this repository.')); + } else if (!preg_match('/^[A-Z]+$/', $v_call)) { + $c_call->setError(pht('Invalid')); + $page->addPageError( + pht('The callsign must contain only UPPERCASE letters.')); + } else { + $exists = false; + try { + $repo = id(new PhabricatorRepositoryQuery()) + ->setViewer($this->getRequest()->getUser()) + ->withCallsigns(array($v_call)) + ->executeOne(); + $exists = (bool)$repo; + } catch (PhabricatorPolicyException $ex) { + $exists = true; + } + if ($exists) { + $c_call->setError(pht('Not Unique')); + $page->addPageError( + pht( + 'Another repository already uses that callsign. You must choose '. + 'a unique callsign.')); + } + } + + return $c_name->isValid() && + $c_call->isValid(); + } + + +/* -( Page: Remote URI )--------------------------------------------------- */ + + + private function buildRemoteURIPage() { + return id(new PHUIFormPageView()) + ->setUser($this->getRequest()->getUser()) + ->setPageName(pht('Repository Remote URI')) + ->setValidateFormPageCallback(array($this, 'validateRemoteURIPage')) + ->setAdjustFormPageCallback(array($this, 'adjustRemoteURIPage')) ->addControl( id(new AphrontFormTextControl()) ->setName('remoteURI')); } - public function adjustNamePage(PHUIFormPageView $page) { + public function adjustRemoteURIPage(PHUIFormPageView $page) { $form = $page->getForm(); $is_git = false; $is_svn = false; $is_mercurial = false; - switch ($form->getPage('vcs')->getControl('vcs')->getValue()) { + if ($this->getRepository()) { + $vcs = $this->getRepository()->getVersionControlSystem(); + } else { + $vcs = $form->getPage('vcs')->getControl('vcs')->getValue(); + } + + switch ($vcs) { case PhabricatorRepositoryType::REPOSITORY_TYPE_GIT: $is_git = true; break; case PhabricatorRepositoryType::REPOSITORY_TYPE_SVN: $is_svn = true; break; case PhabricatorRepositoryType::REPOSITORY_TYPE_MERCURIAL: $is_mercurial = true; break; default: throw new Exception("Unsupported VCS!"); } $has_local = ($is_git || $is_mercurial); if ($is_git) { $uri_label = pht('Remote URI'); $instructions = pht( 'Enter the URI to clone this Git repository from. It should usually '. 'look like one of these examples:'. "\n\n". "| Example Git Remote URIs |\n". "| ----------------------- |\n". "| `git@github.com:example/example.git` |\n". "| `ssh://user@host.com/git/example.git` |\n". "| `file:///local/path/to/repo` |\n". "| `https://example.com/repository.git` |\n"); } else if ($is_mercurial) { $uri_label = pht('Remote URI'); $instructions = pht( 'Enter the URI to clone this Mercurial repository from. It should '. 'usually look like one of these examples:'. "\n\n". "| Example Mercurial Remote URIs |\n". "| ----------------------- |\n". "| `ssh://hg@bitbucket.org/example/repository` |\n". "| `file:///local/path/to/repo` |\n"); } else if ($is_svn) { $uri_label = pht('Repository Root'); $instructions = pht( 'Enter the **Repository Root** for this Subversion repository. '. 'You can figure this out by running `svn info` in a working copy '. 'and looking at the value in the `Repository Root` field. It '. 'should be a URI and will usually look like these:'. "\n\n". "| Example Subversion Repository Root URIs |\n". "| ------------------------------ |\n". "| `http://svn.example.org/svnroot/` |\n". "| `svn+ssh://svn.example.com/svnroot/` |\n". "| `svn://svn.example.net/svnroot/` |\n". "| `file:///local/path/to/svnroot/` |\n". "\n\n". "Make sure you specify the root of the repository, not a ". "subdirectory."); } else { throw new Exception("Unsupported VCS!"); } $page->addRemarkupInstructions($instructions, 'remoteURI'); $page->getControl('remoteURI')->setLabel($uri_label); } - public function validateNamePage(PHUIFormPageView $page) { - $c_name = $page->getControl('name'); - $v_name = $c_name->getValue(); - if (!strlen($v_name)) { - $c_name->setError(pht('Required')); - $page->addPageError( - pht('You must choose a name for this repository.')); - } - - $c_call = $page->getControl('callsign'); - $v_call = $c_call->getValue(); - if (!strlen($v_call)) { - $c_call->setError(pht('Required')); - $page->addPageError( - pht('You must choose a callsign for this repository.')); - } else if (!preg_match('/^[A-Z]+$/', $v_call)) { - $c_call->setError(pht('Invalid')); - $page->addPageError( - pht('The callsign must contain only UPPERCASE letters.')); - } else { - $exists = false; - try { - $repo = id(new PhabricatorRepositoryQuery()) - ->setViewer($this->getRequest()->getUser()) - ->withCallsigns(array($v_call)) - ->executeOne(); - $exists = (bool)$repo; - } catch (PhabricatorPolicyException $ex) { - $exists = true; - } - if ($exists) { - $c_call->setError(pht('Not Unique')); - $page->addPageError( - pht( - 'Another repository already uses that callsign. You must choose '. - 'a unique callsign.')); - } - } - + public function validateRemoteURIPage(PHUIFormPageView $page) { $c_remote = $page->getControl('remoteURI'); $v_remote = $c_remote->getValue(); if (!strlen($v_remote)) { $c_remote->setError(pht('Required')); $page->addPageError( pht("You must specify a URI.")); } else { $proto = $this->getRemoteURIProtocol($v_remote); if ($proto === 'file') { if (!preg_match('@^file:///@', $v_remote)) { $c_remote->setError(pht('Invalid')); $page->addPageError( pht( "URIs using the 'file://' protocol should have three slashes ". "(e.g., 'file:///absolute/path/to/file'). You only have two. ". "Add another one.")); } } switch ($proto) { case 'ssh': case 'http': case 'https': case 'file': case 'git': case 'svn': case 'svn+ssh': break; default: $c_remote->setError(pht('Invalid')); $page->addPageError( pht( "The URI protocol is unrecognized. It should begin ". "'ssh://', 'http://', 'https://', 'file://', 'git://', ". "'svn://', 'svn+ssh://', or be in the form ". "'git@domain.com:path'.")); break; } } - return $c_name->isValid() && - $c_call->isValid() && - $c_remote->isValid(); + return $c_remote->isValid(); } /* -( Page: Authentication )----------------------------------------------- */ public function buildAuthPage() { return id(new PHUIFormPageView()) ->setPageName(pht('Authentication')) ->setUser($this->getRequest()->getUser()) ->setAdjustFormPageCallback(array($this, 'adjustAuthPage')) ->addControl( id(new AphrontFormTextControl()) ->setName('ssh-login') ->setLabel('SSH User')) ->addControl( id(new AphrontFormTextAreaControl()) ->setName('ssh-key') ->setLabel('SSH Private Key') ->setHeight(AphrontFormTextAreaControl::HEIGHT_SHORT) ->setCaption( hsprintf('Specify the entire private key, or...'))) ->addControl( id(new AphrontFormTextControl()) ->setName('ssh-keyfile') ->setLabel('SSH Private Key Path') ->setCaption( '...specify a path on disk where the daemon should '. 'look for a private key.')) ->addControl( id(new AphrontFormTextControl()) ->setName('http-login') ->setLabel('Username')) ->addControl( id(new AphrontFormPasswordControl()) ->setName('http-pass') ->setLabel('Password')); } public function adjustAuthPage($page) { $form = $page->getForm(); - $remote_uri = $form->getPage('name')->getControl('remoteURI')->getValue(); - $vcs = $form->getPage('vcs')->getControl('vcs')->getValue(); + + $remote_uri = $form->getPage('remote-uri') + ->getControl('remoteURI') + ->getValue(); + + if ($this->getRepository()) { + $vcs = $this->getRepository()->getVersionControlSystem(); + } else { + $vcs = $form->getPage('vcs')->getControl('vcs')->getValue(); + } + $proto = $this->getRemoteURIProtocol($remote_uri); $remote_user = $this->getRemoteURIUser($remote_uri); $page->getControl('ssh-login')->setHidden(true); $page->getControl('ssh-key')->setHidden(true); $page->getControl('ssh-keyfile')->setHidden(true); $page->getControl('http-login')->setHidden(true); $page->getControl('http-pass')->setHidden(true); if ($this->isSSHProtocol($proto)) { $page->getControl('ssh-login')->setHidden(false); $page->getControl('ssh-key')->setHidden(false); $page->getControl('ssh-keyfile')->setHidden(false); $c_login = $page->getControl('ssh-login'); if (!strlen($c_login->getValue())) { $c_login->setValue($remote_user); } $page->addRemarkupInstructions( pht( 'Enter the username and private key to use to connect to the '. 'the repository hosted at:'. "\n\n". " lang=text\n". " %s". "\n\n". 'You can either copy/paste the entire private key, or put it '. 'somewhere on disk and provide the path to it.', $remote_uri), 'ssh-login'); } else if ($this->isUsernamePasswordProtocol($proto)) { $page->getControl('http-login')->setHidden(false); $page->getControl('http-pass')->setHidden(false); $page->addRemarkupInstructions( pht( 'Enter the a username and pasword used to connect to the '. 'repository hosted at:'. "\n\n". " lang=text\n". " %s". "\n\n". "If this repository does not require a username or password, ". "you can leave these fields blank.", $remote_uri), 'http-login'); } else if ($proto == 'file') { $page->addRemarkupInstructions( pht( 'You do not need to configure any authentication options for '. 'repositories accessed over the `file://` protocol. Continue '. 'to the next step.'), 'ssh-login'); } else { throw new Exception("Unknown URI protocol!"); } } public function validateAuthPage(PHUIFormPageView $page) { $form = $page->getForm(); $remote_uri = $form->getPage('remote')->getControl('remoteURI')->getValue(); $proto = $this->getRemoteURIProtocol($remote_uri); if ($this->isSSHProtocol($proto)) { $c_user = $page->getControl('ssh-login'); $c_key = $page->getControl('ssh-key'); $c_file = $page->getControl('ssh-keyfile'); $v_user = $c_user->getValue(); $v_key = $c_key->getValue(); $v_file = $c_file->getValue(); if (!strlen($v_user)) { $c_user->setError(pht('Required')); $page->addPageError( pht('You must provide an SSH login username to connect over SSH.')); } if (!strlen($v_key) && !strlen($v_file)) { $c_key->setError(pht('No Key')); $c_file->setError(pht('No Key')); $page->addPageError( pht( 'You must provide either a private key or the path to a private '. 'key to connect over SSH.')); } else if (strlen($v_key) && strlen($v_file)) { $c_key->setError(pht('Ambiguous')); $c_file->setError(pht('Ambiguous')); $page->addPageError( pht( 'Provide either a private key or the path to a private key, not '. 'both.')); } else if (!preg_match('/PRIVATE KEY/', $v_key)) { $c_key->setError(pht('Invalid')); $page->addPageError( pht( 'The private key you provided is missing the PRIVATE KEY header. '. 'You should include the header and footer. (Did you provide a '. 'public key by mistake?)')); } return $c_user->isValid() && $c_key->isValid() && $c_file->isValid(); } else if ($this->isUsernamePasswordProtocol($proto)) { return true; } else { return true; } } /* -( Page: Done )--------------------------------------------------------- */ private function buildDonePage() { return id(new PHUIFormPageView()) ->setPageName(pht('Repository Ready!')) ->setValidateFormPageCallback(array($this, 'validateDonePage')) ->setUser($this->getRequest()->getUser()) ->addControl( id(new AphrontFormRadioButtonControl()) ->setName('activate') ->setLabel(pht('Start Now')) ->addButton( 'start', pht('Start Import Now'), pht( 'Start importing the repository right away. This will import '. 'the entire repository using default settings.')) ->addButton( 'wait', pht('Configure More Options First'), pht( 'Configure more options before beginning the repository '. 'import. This will let you fine-tune settings.. You can '. 'start the import whenever you are ready.'))); } public function validateDonePage(PHUIFormPageView $page) { $c_activate = $page->getControl('activate'); $v_activate = $c_activate->getValue(); if ($v_activate != 'start' && $v_activate != 'wait') { $c_activate->setError(pht('Required')); $page->addPageError( pht('Make a choice about repository activation.')); } return $c_activate->isValid(); } /* -( Internal )----------------------------------------------------------- */ private function getRemoteURIProtocol($raw_uri) { $uri = new PhutilURI($raw_uri); if ($uri->getProtocol()) { return strtolower($uri->getProtocol()); } $git_uri = new PhutilGitURI($raw_uri); if (strlen($git_uri->getDomain()) && strlen($git_uri->getPath())) { return 'ssh'; } return null; } private function getRemoteURIUser($raw_uri) { $uri = new PhutilURI($raw_uri); if ($uri->getUser()) { return $uri->getUser(); } $git_uri = new PhutilGitURI($raw_uri); if (strlen($git_uri->getDomain()) && strlen($git_uri->getPath())) { return $git_uri->getUser(); } return null; } private function isSSHProtocol($proto) { return ($proto == 'git' || $proto == 'ssh' || $proto == 'svn+ssh'); } private function isUsernamePasswordProtocol($proto) { return ($proto == 'http' || $proto == 'https' || $proto == 'svn'); } + private function setRepository(PhabricatorRepository $repository) { + $this->repository = $repository; + return $this; + } + + private function getRepository() { + return $this->repository; + } + + } diff --git a/src/applications/diffusion/controller/DiffusionRepositoryEditController.php b/src/applications/diffusion/controller/DiffusionRepositoryEditController.php index fdbd5cf77..c3b5a9c12 100644 --- a/src/applications/diffusion/controller/DiffusionRepositoryEditController.php +++ b/src/applications/diffusion/controller/DiffusionRepositoryEditController.php @@ -1,448 +1,495 @@ getRequest(); $user = $request->getUser(); $drequest = $this->diffusionRequest; $repository = $drequest->getRepository(); $is_svn = false; $is_git = false; $is_hg = false; switch ($repository->getVersionControlSystem()) { case PhabricatorRepositoryType::REPOSITORY_TYPE_GIT: $is_git = true; break; case PhabricatorRepositoryType::REPOSITORY_TYPE_SVN: $is_svn = true; break; case PhabricatorRepositoryType::REPOSITORY_TYPE_MERCURIAL: $is_hg = true; break; } $has_branches = ($is_git || $is_hg); $crumbs = $this->buildCrumbs(); $crumbs->addCrumb( id(new PhabricatorCrumbView()) ->setName(pht('Edit'))); $title = pht('Edit %s', $repository->getName()); $header = id(new PHUIHeaderView()) ->setHeader($title); if (!$repository->isTracked()) { $header->addTag( id(new PhabricatorTagView()) ->setType(PhabricatorTagView::TYPE_STATE) ->setName(pht('Inactive')) ->setBackgroundColor(PhabricatorTagView::COLOR_BLACK)); } $basic_actions = $this->buildBasicActions($repository); $basic_properties = $this->buildBasicProperties($repository, $basic_actions); $policy_actions = $this->buildPolicyActions($repository); $policy_properties = $this->buildPolicyProperties($repository, $policy_actions); + $remote_properties = $this->buildRemoteProperties( + $repository, + $this->buildRemoteActions($repository)); + $encoding_actions = $this->buildEncodingActions($repository); $encoding_properties = $this->buildEncodingProperties($repository, $encoding_actions); $branches_properties = null; if ($has_branches) { $branches_properties = $this->buildBranchesProperties( $repository, $this->buildBranchesActions($repository)); } $subversion_properties = null; if ($is_svn) { $subversion_properties = $this->buildSubversionProperties( $repository, $this->buildSubversionActions($repository)); } $actions_properties = $this->buildActionsProperties( $repository, $this->buildActionsActions($repository)); $xactions = id(new PhabricatorRepositoryTransactionQuery()) ->setViewer($user) ->withObjectPHIDs(array($repository->getPHID())) ->execute(); $engine = id(new PhabricatorMarkupEngine()) ->setViewer($user); foreach ($xactions as $xaction) { if ($xaction->getComment()) { $engine->addObject( $xaction->getComment(), PhabricatorApplicationTransactionComment::MARKUP_FIELD_COMMENT); } } $engine->process(); $xaction_view = id(new PhabricatorApplicationTransactionView()) ->setUser($user) ->setObjectPHID($repository->getPHID()) ->setTransactions($xactions) ->setMarkupEngine($engine); $obj_box = id(new PHUIObjectBoxView()) ->setHeader($header) ->addPropertyList($basic_properties) ->addPropertyList($policy_properties) + ->addPropertyList($remote_properties) ->addPropertyList($encoding_properties); if ($branches_properties) { $obj_box->addPropertyList($branches_properties); } if ($subversion_properties) { $obj_box->addPropertyList($subversion_properties); } $obj_box->addPropertyList($actions_properties); return $this->buildApplicationPage( array( $crumbs, $obj_box, $xaction_view, ), array( 'title' => $title, 'device' => true, )); } private function buildBasicActions(PhabricatorRepository $repository) { $user = $this->getRequest()->getUser(); $view = id(new PhabricatorActionListView()) ->setObjectURI($this->getRequest()->getRequestURI()) ->setUser($user); $can_edit = PhabricatorPolicyFilter::hasCapability( $user, $repository, PhabricatorPolicyCapability::CAN_EDIT); $edit = id(new PhabricatorActionView()) ->setIcon('edit') ->setName(pht('Edit Basic Information')) ->setHref($this->getRepositoryControllerURI($repository, 'edit/basic/')) ->setDisabled(!$can_edit) ->setWorkflow(!$can_edit); $view->addAction($edit); $activate = id(new PhabricatorActionView()) ->setHref( $this->getRepositoryControllerURI($repository, 'edit/activate/')) ->setDisabled(!$can_edit) ->setWorkflow(true); if ($repository->isTracked()) { $activate ->setIcon('disable') ->setName(pht('Deactivate Repository')); } else { $activate ->setIcon('enable') ->setName(pht('Activate Repository')); } $view->addAction($activate); return $view; } private function buildBasicProperties( PhabricatorRepository $repository, PhabricatorActionListView $actions) { $user = $this->getRequest()->getUser(); $view = id(new PHUIPropertyListView()) ->setUser($user) ->setActionList($actions); $view->addProperty(pht('Name'), $repository->getName()); $view->addProperty(pht('ID'), $repository->getID()); $view->addProperty(pht('PHID'), $repository->getPHID()); $type = PhabricatorRepositoryType::getNameForRepositoryType( $repository->getVersionControlSystem()); $view->addProperty(pht('Type'), $type); $view->addProperty(pht('Callsign'), $repository->getCallsign()); $description = $repository->getDetail('description'); $view->addSectionHeader(pht('Description')); if (!strlen($description)) { $description = phutil_tag('em', array(), pht('No description provided.')); } else { $description = PhabricatorMarkupEngine::renderOneObject( $repository, 'description', $user); } $view->addTextContent($description); return $view; } private function buildEncodingActions(PhabricatorRepository $repository) { $user = $this->getRequest()->getUser(); $view = id(new PhabricatorActionListView()) ->setObjectURI($this->getRequest()->getRequestURI()) ->setUser($user); $can_edit = PhabricatorPolicyFilter::hasCapability( $user, $repository, PhabricatorPolicyCapability::CAN_EDIT); $edit = id(new PhabricatorActionView()) ->setIcon('edit') ->setName(pht('Edit Text Encoding')) ->setHref( $this->getRepositoryControllerURI($repository, 'edit/encoding/')) ->setWorkflow(!$can_edit) ->setDisabled(!$can_edit); $view->addAction($edit); return $view; } private function buildEncodingProperties( PhabricatorRepository $repository, PhabricatorActionListView $actions) { $user = $this->getRequest()->getUser(); $view = id(new PHUIPropertyListView()) ->setUser($user) ->setActionList($actions) ->addSectionHeader(pht('Text Encoding')); $encoding = $repository->getDetail('encoding'); if (!$encoding) { $encoding = phutil_tag('em', array(), pht('Use Default (UTF-8)')); } $view->addProperty(pht('Encoding'), $encoding); return $view; } private function buildPolicyActions(PhabricatorRepository $repository) { $viewer = $this->getRequest()->getUser(); $view = id(new PhabricatorActionListView()) ->setObjectURI($this->getRequest()->getRequestURI()) ->setUser($viewer); $can_edit = PhabricatorPolicyFilter::hasCapability( $viewer, $repository, PhabricatorPolicyCapability::CAN_EDIT); $edit = id(new PhabricatorActionView()) ->setIcon('edit') ->setName(pht('Edit Policies')) ->setHref( $this->getRepositoryControllerURI($repository, 'edit/policy/')) ->setWorkflow(!$can_edit) ->setDisabled(!$can_edit); $view->addAction($edit); return $view; } private function buildPolicyProperties( PhabricatorRepository $repository, PhabricatorActionListView $actions) { $viewer = $this->getRequest()->getUser(); $view = id(new PHUIPropertyListView()) ->setUser($viewer) ->setActionList($actions) ->addSectionHeader(pht('Policies')); $descriptions = PhabricatorPolicyQuery::renderPolicyDescriptions( $viewer, $repository); $view->addProperty( pht('Visible To'), $descriptions[PhabricatorPolicyCapability::CAN_VIEW]); $view->addProperty( pht('Editable By'), $descriptions[PhabricatorPolicyCapability::CAN_EDIT]); return $view; } private function buildBranchesActions(PhabricatorRepository $repository) { $viewer = $this->getRequest()->getUser(); $view = id(new PhabricatorActionListView()) ->setObjectURI($this->getRequest()->getRequestURI()) ->setUser($viewer); $can_edit = PhabricatorPolicyFilter::hasCapability( $viewer, $repository, PhabricatorPolicyCapability::CAN_EDIT); $edit = id(new PhabricatorActionView()) ->setIcon('edit') ->setName(pht('Edit Branches')) ->setHref( $this->getRepositoryControllerURI($repository, 'edit/branches/')) ->setWorkflow(!$can_edit) ->setDisabled(!$can_edit); $view->addAction($edit); return $view; } private function buildBranchesProperties( PhabricatorRepository $repository, PhabricatorActionListView $actions) { $viewer = $this->getRequest()->getUser(); $view = id(new PHUIPropertyListView()) ->setUser($viewer) ->setActionList($actions) ->addSectionHeader(pht('Branches')); $default_branch = nonempty( $repository->getHumanReadableDetail('default-branch'), phutil_tag('em', array(), $repository->getDefaultBranch())); $view->addProperty(pht('Default Branch'), $default_branch); $track_only = nonempty( $repository->getHumanReadableDetail('branch-filter'), phutil_tag('em', array(), pht('Track All Branches'))); $view->addProperty(pht('Track Only'), $track_only); $autoclose_only = nonempty( $repository->getHumanReadableDetail('close-commits-filter'), phutil_tag('em', array(), pht('Autoclose On All Branches'))); $view->addProperty(pht('Autoclose Only'), $autoclose_only); return $view; } private function buildSubversionActions(PhabricatorRepository $repository) { $viewer = $this->getRequest()->getUser(); $view = id(new PhabricatorActionListView()) ->setObjectURI($this->getRequest()->getRequestURI()) ->setUser($viewer); $can_edit = PhabricatorPolicyFilter::hasCapability( $viewer, $repository, PhabricatorPolicyCapability::CAN_EDIT); $edit = id(new PhabricatorActionView()) ->setIcon('edit') ->setName(pht('Edit Subversion Info')) ->setHref( $this->getRepositoryControllerURI($repository, 'edit/subversion/')) ->setWorkflow(!$can_edit) ->setDisabled(!$can_edit); $view->addAction($edit); return $view; } private function buildSubversionProperties( PhabricatorRepository $repository, PhabricatorActionListView $actions) { $viewer = $this->getRequest()->getUser(); $view = id(new PHUIPropertyListView()) ->setUser($viewer) ->setActionList($actions) ->addSectionHeader(pht('Subversion')); $svn_uuid = nonempty( $repository->getUUID(), phutil_tag('em', array(), pht('Not Configured'))); $view->addProperty(pht('Subversion UUID'), $svn_uuid); $svn_subpath = nonempty( $repository->getHumanReadableDetail('svn-subpath'), phutil_tag('em', array(), pht('Import Entire Repository'))); $view->addProperty(pht('Import Only'), $svn_subpath); return $view; } private function buildActionsActions(PhabricatorRepository $repository) { $viewer = $this->getRequest()->getUser(); $view = id(new PhabricatorActionListView()) ->setObjectURI($this->getRequest()->getRequestURI()) ->setUser($viewer); $can_edit = PhabricatorPolicyFilter::hasCapability( $viewer, $repository, PhabricatorPolicyCapability::CAN_EDIT); $edit = id(new PhabricatorActionView()) ->setIcon('edit') ->setName(pht('Edit Actions')) ->setHref( $this->getRepositoryControllerURI($repository, 'edit/actions/')) ->setWorkflow(!$can_edit) ->setDisabled(!$can_edit); $view->addAction($edit); return $view; } private function buildActionsProperties( PhabricatorRepository $repository, PhabricatorActionListView $actions) { $viewer = $this->getRequest()->getUser(); $view = id(new PHUIPropertyListView()) ->setUser($viewer) ->setActionList($actions) ->addSectionHeader(pht('Actions')); $notify = $repository->getDetail('herald-disabled') ? pht('Off') : pht('On'); $notify = phutil_tag('em', array(), $notify); $view->addProperty(pht('Publish/Notify'), $notify); $autoclose = $repository->getDetail('disable-autoclose') ? pht('Off') : pht('On'); $autoclose = phutil_tag('em', array(), $autoclose); $view->addProperty(pht('Autoclose'), $autoclose); return $view; } + private function buildRemoteActions(PhabricatorRepository $repository) { + $viewer = $this->getRequest()->getUser(); + + $view = id(new PhabricatorActionListView()) + ->setObjectURI($this->getRequest()->getRequestURI()) + ->setUser($viewer); + + $can_edit = PhabricatorPolicyFilter::hasCapability( + $viewer, + $repository, + PhabricatorPolicyCapability::CAN_EDIT); + + $edit = id(new PhabricatorActionView()) + ->setIcon('edit') + ->setName(pht('Edit Remote')) + ->setHref( + $this->getRepositoryControllerURI($repository, 'edit/remote/')) + ->setWorkflow(!$can_edit) + ->setDisabled(!$can_edit); + $view->addAction($edit); + + return $view; + } + + private function buildRemoteProperties( + PhabricatorRepository $repository, + PhabricatorActionListView $actions) { + + $viewer = $this->getRequest()->getUser(); + + $view = id(new PHUIPropertyListView()) + ->setUser($viewer) + ->setActionList($actions) + ->addSectionHeader(pht('Remote')); + + $view->addProperty( + pht('Remote URI'), + $repository->getDetail('remote-uri')); + + return $view; + } + } diff --git a/src/applications/repository/editor/PhabricatorRepositoryEditor.php b/src/applications/repository/editor/PhabricatorRepositoryEditor.php index 4c813467c..52684c41e 100644 --- a/src/applications/repository/editor/PhabricatorRepositoryEditor.php +++ b/src/applications/repository/editor/PhabricatorRepositoryEditor.php @@ -1,172 +1,215 @@ getTransactionType()) { case PhabricatorRepositoryTransaction::TYPE_ACTIVATE: return $object->isTracked(); case PhabricatorRepositoryTransaction::TYPE_NAME: return $object->getName(); case PhabricatorRepositoryTransaction::TYPE_DESCRIPTION: return $object->getDetail('description'); case PhabricatorRepositoryTransaction::TYPE_ENCODING: return $object->getDetail('encoding'); case PhabricatorRepositoryTransaction::TYPE_DEFAULT_BRANCH: return $object->getDetail('default-branch'); case PhabricatorRepositoryTransaction::TYPE_TRACK_ONLY: return array_keys($object->getDetail('branch-filter', array())); case PhabricatorRepositoryTransaction::TYPE_AUTOCLOSE_ONLY: return array_keys($object->getDetail('close-commits-filter', array())); case PhabricatorRepositoryTransaction::TYPE_UUID: return $object->getUUID(); case PhabricatorRepositoryTransaction::TYPE_SVN_SUBPATH: return $object->getDetail('svn-subpath'); case PhabricatorRepositoryTransaction::TYPE_NOTIFY: return (int)!$object->getDetail('herald-disabled'); case PhabricatorRepositoryTransaction::TYPE_AUTOCLOSE: return (int)!$object->getDetail('disable-autoclose'); + case PhabricatorRepositoryTransaction::TYPE_REMOTE_URI: + return $object->getDetail('remote-uri'); + case PhabricatorRepositoryTransaction::TYPE_SSH_LOGIN: + return $object->getDetail('ssh-login'); + case PhabricatorRepositoryTransaction::TYPE_SSH_KEY: + return $object->getDetail('ssh-key'); + case PhabricatorRepositoryTransaction::TYPE_SSH_KEYFILE: + return $object->getDetail('ssh-keyfile'); + case PhabricatorRepositoryTransaction::TYPE_HTTP_LOGIN: + return $object->getDetail('http-login'); + case PhabricatorRepositoryTransaction::TYPE_HTTP_PASS: + return $object->getDetail('http-pass'); } } protected function getCustomTransactionNewValue( PhabricatorLiskDAO $object, PhabricatorApplicationTransaction $xaction) { switch ($xaction->getTransactionType()) { case PhabricatorRepositoryTransaction::TYPE_ACTIVATE: case PhabricatorRepositoryTransaction::TYPE_NAME: case PhabricatorRepositoryTransaction::TYPE_DESCRIPTION: case PhabricatorRepositoryTransaction::TYPE_ENCODING: case PhabricatorRepositoryTransaction::TYPE_DEFAULT_BRANCH: case PhabricatorRepositoryTransaction::TYPE_TRACK_ONLY: case PhabricatorRepositoryTransaction::TYPE_AUTOCLOSE_ONLY: case PhabricatorRepositoryTransaction::TYPE_UUID: case PhabricatorRepositoryTransaction::TYPE_SVN_SUBPATH: + case PhabricatorRepositoryTransaction::TYPE_REMOTE_URI: + case PhabricatorRepositoryTransaction::TYPE_SSH_LOGIN: + case PhabricatorRepositoryTransaction::TYPE_SSH_KEY: + case PhabricatorRepositoryTransaction::TYPE_SSH_KEYFILE: + case PhabricatorRepositoryTransaction::TYPE_HTTP_LOGIN: + case PhabricatorRepositoryTransaction::TYPE_HTTP_PASS: return $xaction->getNewValue(); case PhabricatorRepositoryTransaction::TYPE_NOTIFY: case PhabricatorRepositoryTransaction::TYPE_AUTOCLOSE: return (int)$xaction->getNewValue(); } } protected function applyCustomInternalTransaction( PhabricatorLiskDAO $object, PhabricatorApplicationTransaction $xaction) { switch ($xaction->getTransactionType()) { case PhabricatorRepositoryTransaction::TYPE_ACTIVATE: $object->setDetail('tracking-enabled', $xaction->getNewValue()); break; case PhabricatorRepositoryTransaction::TYPE_NAME: $object->setName($xaction->getNewValue()); break; case PhabricatorRepositoryTransaction::TYPE_DESCRIPTION: $object->setDetail('description', $xaction->getNewValue()); break; case PhabricatorRepositoryTransaction::TYPE_DEFAULT_BRANCH: $object->setDetail('default-branch', $xaction->getNewValue()); break; case PhabricatorRepositoryTransaction::TYPE_TRACK_ONLY: $object->setDetail( 'branch-filter', array_fill_keys($xaction->getNewValue(), true)); break; case PhabricatorRepositoryTransaction::TYPE_AUTOCLOSE_ONLY: $object->setDetail( 'close-commits-filter', array_fill_keys($xaction->getNewValue(), true)); break; case PhabricatorRepositoryTransaction::TYPE_UUID: $object->setUUID($xaction->getNewValue()); break; case PhabricatorRepositoryTransaction::TYPE_SVN_SUBPATH: $object->setDetail('svn-subpath', $xaction->getNewValue()); break; case PhabricatorRepositoryTransaction::TYPE_NOTIFY: $object->setDetail('herald-disabled', (int)!$xaction->getNewValue()); break; case PhabricatorRepositoryTransaction::TYPE_AUTOCLOSE: $object->setDetail('disable-autoclose', (int)!$xaction->getNewValue()); break; + case PhabricatorRepositoryTransaction::TYPE_REMOTE_URI: + $object->setDetail('remote-uri', $xaction->getNewValue()); + break; + case PhabricatorRepositoryTransaction::TYPE_SSH_LOGIN: + $object->setDetail('ssh-login', $xaction->getNewValue()); + break; + case PhabricatorRepositoryTransaction::TYPE_SSH_KEY: + $object->setDetail('ssh-key', $xaction->getNewValue()); + break; + case PhabricatorRepositoryTransaction::TYPE_SSH_KEYFILE: + $object->setDetail('ssh-keyfile', $xaction->getNewValue()); + break; + case PhabricatorRepositoryTransaction::TYPE_HTTP_LOGIN: + $object->setDetail('http-login', $xaction->getNewValue()); + break; + case PhabricatorRepositoryTransaction::TYPE_HTTP_PASS: + $object->setDetail('http-pass', $xaction->getNewValue()); + break; case PhabricatorRepositoryTransaction::TYPE_ENCODING: // Make sure the encoding is valid by converting to UTF-8. This tests // that the user has mbstring installed, and also that they didn't type // a garbage encoding name. Note that we're converting from UTF-8 to // the target encoding, because mbstring is fine with converting from // a nonsense encoding. $encoding = $xaction->getNewValue(); if (strlen($encoding)) { try { phutil_utf8_convert('.', $encoding, 'UTF-8'); } catch (Exception $ex) { throw new PhutilProxyException( pht( "Error setting repository encoding '%s': %s'", $encoding, $ex->getMessage()), $ex); } } $object->setDetail('encoding', $encoding); break; } } protected function applyCustomExternalTransaction( PhabricatorLiskDAO $object, PhabricatorApplicationTransaction $xaction) { return; } protected function mergeTransactions( PhabricatorApplicationTransaction $u, PhabricatorApplicationTransaction $v) { $type = $u->getTransactionType(); switch ($type) { } return parent::mergeTransactions($u, $v); } protected function transactionHasEffect( PhabricatorLiskDAO $object, PhabricatorApplicationTransaction $xaction) { $old = $xaction->getOldValue(); $new = $xaction->getNewValue(); $type = $xaction->getTransactionType(); switch ($type) { } return parent::transactionHasEffect($object, $xaction); } } diff --git a/src/applications/repository/storage/PhabricatorRepositoryTransaction.php b/src/applications/repository/storage/PhabricatorRepositoryTransaction.php index a3a4cb54e..c66885af5 100644 --- a/src/applications/repository/storage/PhabricatorRepositoryTransaction.php +++ b/src/applications/repository/storage/PhabricatorRepositoryTransaction.php @@ -1,218 +1,261 @@ getAuthorPHID(); $old = $this->getOldValue(); $new = $this->getNewValue(); switch ($this->getTransactionType()) { case self::TYPE_ACTIVATE: if ($new) { return pht( '%s activated this repository.', $this->renderHandleLink($author_phid)); } else { return pht( '%s deactivated this repository.', $this->renderHandleLink($author_phid)); } case self::TYPE_NAME: return pht( '%s renamed this repository from "%s" to "%s".', $this->renderHandleLink($author_phid), $old, $new); case self::TYPE_DESCRIPTION: return pht( '%s updated the description of this repository.', $this->renderHandleLink($author_phid)); case self::TYPE_ENCODING: if (strlen($old) && !strlen($new)) { return pht( '%s removed the "%s" encoding configured for this repository.', $this->renderHandleLink($author_phid), $old); } else if (strlen($new) && !strlen($old)) { return pht( '%s set the encoding for this repository to "%s".', $this->renderHandleLink($author_phid), $new); } else { return pht( '%s changed the repository encoding from "%s" to "%s".', $this->renderHandleLink($author_phid), $old, $new); } case self::TYPE_DEFAULT_BRANCH: if (!strlen($new)) { return pht( '%s removed "%s" as the default branch.', $this->renderHandleLink($author_phid), $old); } else if (!strlen($old)) { return pht( '%s set the default branch to "%s".', $this->renderHandleLink($author_phid), $new); } else { return pht( '%s changed the default branch from "%s" to "%s".', $this->renderHandleLink($author_phid), $old, $new); } break; case self::TYPE_TRACK_ONLY: if (!$new) { return pht( '%s set this repository to track all branches.', $this->renderHandleLink($author_phid)); } else if (!$old) { return pht( '%s set this repository to track branches: %s.', $this->renderHandleLink($author_phid), implode(', ', $new)); } else { return pht( '%s changed track branches from "%s" to "%s".', $this->renderHandleLink($author_phid), implode(', ', $old), implode(', ', $new)); } break; case self::TYPE_AUTOCLOSE_ONLY: if (!$new) { return pht( '%s set this repository to autoclose on all branches.', $this->renderHandleLink($author_phid)); } else if (!$old) { return pht( '%s set this repository to autoclose on branches: %s.', $this->renderHandleLink($author_phid), implode(', ', $new)); } else { return pht( '%s changed autoclose branches from "%s" to "%s".', $this->renderHandleLink($author_phid), implode(', ', $old), implode(', ', $new)); } break; case self::TYPE_UUID: if (!strlen($new)) { return pht( '%s removed "%s" as the repository UUID.', $this->renderHandleLink($author_phid), $old); } else if (!strlen($old)) { return pht( '%s set the repository UUID to "%s".', $this->renderHandleLink($author_phid), $new); } else { return pht( '%s changed the repository UUID from "%s" to "%s".', $this->renderHandleLink($author_phid), $old, $new); } break; case self::TYPE_SVN_SUBPATH: if (!strlen($new)) { return pht( '%s removed "%s" as the Import Only path.', $this->renderHandleLink($author_phid), $old); } else if (!strlen($old)) { return pht( '%s set the repository to import only "%s".', $this->renderHandleLink($author_phid), $new); } else { return pht( '%s changed the import path from "%s" to "%s".', $this->renderHandleLink($author_phid), $old, $new); } break; case self::TYPE_NOTIFY: if ($new) { return pht( '%s enabled notifications and publishing for this repository.', $this->renderHandleLink($author_phid)); } else { return pht( '%s disabled notifications and publishing for this repository.', $this->renderHandleLink($author_phid)); } break; case self::TYPE_AUTOCLOSE: if ($new) { return pht( '%s enabled autoclose for this repository.', $this->renderHandleLink($author_phid)); } else { return pht( '%s disabled autoclose for this repository.', $this->renderHandleLink($author_phid)); } break; - + case self::TYPE_REMOTE_URI: + if (!strlen($old)) { + return pht( + '%s set the remote URI for this repository to "%s".', + $this->renderHandleLink($author_phid), + $new); + } else if (!strlen($new)) { + return pht( + '%s removed the remote URI for this repository.', + $this->renderHandleLink($author_phid)); + } else { + return pht( + '%s changed the remote URI for this repository from "%s" to "%s".', + $this->renderHandleLink($author_phid), + $old, + $new); + } + break; + case self::TYPE_SSH_LOGIN: + return pht( + '%s updated the SSH login for this repository.', + $this->renderHandleLink($author_phid)); + case self::TYPE_SSH_KEY: + return pht( + '%s updated the SSH key for this repository.', + $this->renderHandleLink($author_phid)); + case self::TYPE_SSH_KEYFILE: + return pht( + '%s updated the SSH keyfile for this repository.', + $this->renderHandleLink($author_phid)); + case self::TYPE_HTTP_LOGIN: + return pht( + '%s updated the HTTP login for this repository.', + $this->renderHandleLink($author_phid)); + case self::TYPE_HTTP_PASS: + return pht( + '%s updated the HTTP password for this repository.', + $this->renderHandleLink($author_phid)); } return parent::getTitle(); } public function hasChangeDetails() { switch ($this->getTransactionType()) { case self::TYPE_DESCRIPTION: return true; } return parent::hasChangeDetails(); } public function renderChangeDetails(PhabricatorUser $viewer) { $old = $this->getOldValue(); $new = $this->getNewValue(); $view = id(new PhabricatorApplicationTransactionTextDiffDetailView()) ->setUser($viewer) ->setOldText($old) ->setNewText($new); return $view->render(); } } diff --git a/src/view/form/PHUIFormPageView.php b/src/view/form/PHUIFormPageView.php index 110094c8d..ae17e08bd 100644 --- a/src/view/form/PHUIFormPageView.php +++ b/src/view/form/PHUIFormPageView.php @@ -1,218 +1,222 @@ pageName = $page_name; return $this; } public function getPageName() { return $this->pageName; } public function addPageError($page_error) { $this->pageErrors[] = $page_error; return $this; } public function getPageErrors() { return $this->pageErrors; } public function setAdjustFormPageCallback($adjust_form_page_callback) { $this->adjustFormPageCallback = $adjust_form_page_callback; return $this; } public function setValidateFormPageCallback($validate_form_page_callback) { $this->validateFormPageCallback = $validate_form_page_callback; return $this; } public function addInstructions($text, $before = null) { $tag = phutil_tag( 'div', array( 'class' => 'aphront-form-instructions', ), $text); $append = true; if ($before !== null) { for ($ii = 0; $ii < count($this->content); $ii++) { if ($this->content[$ii] instanceof AphrontFormControl) { if ($this->content[$ii]->getName() == $before) { array_splice($this->content, $ii, 0, array($tag)); $append = false; break; } } } } if ($append) { $this->content[] = $tag; } return $this; } public function addRemarkupInstructions($remarkup, $before = null) { return $this->addInstructions( PhabricatorMarkupEngine::renderOneObject( id(new PhabricatorMarkupOneOff())->setContent($remarkup), 'default', $this->getUser()), $before); } public function addControl(AphrontFormControl $control) { $name = $control->getName(); if (!strlen($name)) { throw new Exception("Form control has no name!"); } if (isset($this->controls[$name])) { throw new Exception( "Form page contains duplicate control with name '{$name}'!"); } $this->controls[$name] = $control; $this->content[] = $control; $control->setFormPage($this); return $this; } public function getControls() { return $this->controls; } public function getControl($name) { if (empty($this->controls[$name])) { throw new Exception("No page control '{$name}'!"); } return $this->controls[$name]; } protected function canAppendChild() { return false; } public function setPagedFormView(PHUIPagedFormView $view, $key) { if ($this->key) { throw new Exception("This page is already part of a form!"); } $this->form = $view; $this->key = $key; return $this; } public function adjustFormPage() { if ($this->adjustFormPageCallback) { call_user_func($this->adjustFormPageCallback, $this); } return $this; } protected function validateFormPage() { if ($this->validateFormPageCallback) { return call_user_func($this->validateFormPageCallback, $this); } return true; } public function getKey() { return $this->key; } public function render() { return $this->content; } public function getForm() { return $this->form; } public function getRequestKey($key) { return $this->getForm()->getRequestKey('p:'.$this->key.':'.$key); } public function validateObjectType($object) { return true; } public function validateResponseType($response) { return true; } protected function validateControls() { $result = true; foreach ($this->getControls() as $name => $control) { if (!$control->isValid()) { $result = false; break; } } return $result; } public function isValid() { if ($this->isValid === null) { $this->isValid = $this->validateControls() && $this->validateFormPage(); } return $this->isValid; } public function readFromRequest(AphrontRequest $request) { foreach ($this->getControls() as $name => $control) { $control->readValueFromRequest($request); } return $this; } public function readFromObject($object) { + foreach ($this->getControls() as $name => $control) { + $control->readValueFromDictionary($object); + } + return $this; } public function writeToResponse($response) { return $this; } public function readSerializedValues(AphrontRequest $request) { foreach ($this->getControls() as $name => $control) { $key = $this->getRequestKey($name); $control->readSerializedValue($request->getStr($key)); } return $this; } public function getSerializedValues() { $dict = array(); foreach ($this->getControls() as $name => $control) { $key = $this->getRequestKey($name); $dict[$key] = $control->getSerializedValue(); } return $dict; } } diff --git a/src/view/form/PHUIPagedFormView.php b/src/view/form/PHUIPagedFormView.php index 53d8c0308..a08898027 100644 --- a/src/view/form/PHUIPagedFormView.php +++ b/src/view/form/PHUIPagedFormView.php @@ -1,271 +1,281 @@ pages[$key])) { throw new Exception("Duplicate page with key '{$key}'!"); } $this->pages[$key] = $page; $page->setPagedFormView($this, $key); $this->selectedPage = null; $this->complete = null; return $this; } /** * @task page */ public function getPage($key) { if (!$this->pageExists($key)) { throw new Exception("No page '{$key}' exists!"); } return $this->pages[$key]; } /** * @task page */ public function pageExists($key) { return isset($this->pages[$key]); } /** * @task page */ protected function getPageIndex($key) { $page = $this->getPage($key); $index = 0; foreach ($this->pages as $target_page) { if ($page === $target_page) { break; } $index++; } return $index; } /** * @task page */ protected function getPageByIndex($index) { foreach ($this->pages as $page) { if (!$index) { return $page; } $index--; } throw new Exception("Requesting out-of-bounds page '{$index}'."); } protected function getLastIndex() { return count($this->pages) - 1; } protected function isFirstPage(PHUIFormPageView $page) { return ($this->getPageIndex($page->getKey()) === 0); } protected function isLastPage(PHUIFormPageView $page) { return ($this->getPageIndex($page->getKey()) === (count($this->pages) - 1)); } public function getSelectedPage() { return $this->selectedPage; } public function readFromObject($object) { return $this->processForm($is_request = false, $object); } public function writeToResponse($response) { foreach ($this->pages as $page) { $page->validateResponseType($response); $response = $page->writeToResponse($page); } return $response; } public function readFromRequest(AphrontRequest $request) { $this->choosePage = $request->getStr($this->getRequestKey('page')); $this->nextPage = $request->getStr('__submit__'); $this->prevPage = $request->getStr('__back__'); return $this->processForm($is_request = true, $request); } public function setName($name) { $this->name = $name; return $this; } public function getValue($page, $key, $default = null) { return $this->getPage($page)->getValue($key, $default); } public function setValue($page, $key, $value) { $this->getPage($page)->setValue($key, $value); return $this; } private function processForm($is_request, $source) { if ($this->pageExists($this->choosePage)) { $selected = $this->getPage($this->choosePage); } else { $selected = $this->getPageByIndex(0); } $is_attempt_complete = false; if ($this->prevPage) { $prev_index = $this->getPageIndex($selected->getKey()) - 1;; $index = max(0, $prev_index); $selected = $this->getPageByIndex($index); } else if ($this->nextPage) { $next_index = $this->getPageIndex($selected->getKey()) + 1; if ($next_index > $this->getLastIndex()) { $is_attempt_complete = true; } $index = min($this->getLastIndex(), $next_index); $selected = $this->getPageByIndex($index); } $validation_error = false; $found_selected = false; foreach ($this->pages as $key => $page) { if ($is_request) { if ($key === $this->choosePage) { $page->readFromRequest($source); } else { $page->readSerializedValues($source); } } else { $page->readFromObject($source); } if (!$found_selected) { $page->adjustFormPage(); } if ($page === $selected) { $found_selected = true; } if (!$found_selected || $is_attempt_complete) { if (!$page->isValid()) { $selected = $page; $validation_error = true; break; } } } if ($is_attempt_complete && !$validation_error) { $this->complete = true; } else { $this->selectedPage = $selected; } return $this; } public function isComplete() { return $this->complete; } public function getRequestKey($key) { return $this->name.':'.$key; } + public function setCancelURI($cancel_uri) { + $this->cancelURI = $cancel_uri; + return $this; + } + + public function getCancelURI() { + return $this->cancelURI; + } + public function getTagContent() { $form = id(new AphrontFormView()) ->setUser($this->getUser()); $selected_page = $this->getSelectedPage(); if (!$selected_page) { throw new Exception("No selected page!"); } $form->addHiddenInput( $this->getRequestKey('page'), $selected_page->getKey()); $errors = array(); foreach ($this->pages as $page) { if ($page == $selected_page) { $errors = $page->getPageErrors(); continue; } foreach ($page->getSerializedValues() as $key => $value) { $form->addHiddenInput($key, $value); } } $submit = id(new PHUIFormMultiSubmitControl()); if (!$this->isFirstPage($selected_page)) { $submit->addBackButton(); + } else if ($this->getCancelURI()) { + $submit->addCancelButton($this->getCancelURI()); } if ($this->isLastPage($selected_page)) { $submit->addSubmitButton(pht("Save")); } else { $submit->addSubmitButton(pht("Continue \xC2\xBB")); } $form->appendChild($selected_page); $form->appendChild($submit); if ($errors) { $errors = id(new AphrontErrorView())->setErrors($errors); } $header = null; if ($selected_page->getPageName()) { $header = id(new PHUIHeaderView()) ->setHeader($selected_page->getPageName()); } - return array( - $header, - $errors, - $form, - ); + return id(new PHUIObjectBoxView()) + ->setHeader($header) + ->setFormError($errors) + ->setForm($form); } } diff --git a/src/view/form/control/AphrontFormControl.php b/src/view/form/control/AphrontFormControl.php index 5a480179d..a955916fb 100644 --- a/src/view/form/control/AphrontFormControl.php +++ b/src/view/form/control/AphrontFormControl.php @@ -1,234 +1,239 @@ hidden = $hidden; return $this; } public function setID($id) { $this->id = $id; return $this; } public function getID() { return $this->id; } public function setControlID($control_id) { $this->controlID = $control_id; return $this; } public function getControlID() { return $this->controlID; } public function setControlStyle($control_style) { $this->controlStyle = $control_style; return $this; } public function getControlStyle() { return $this->controlStyle; } public function setLabel($label) { $this->label = $label; return $this; } public function getLabel() { return $this->label; } public function setCaption($caption) { $this->caption = $caption; return $this; } public function getCaption() { return $this->caption; } public function setError($error) { $this->error = $error; return $this; } public function getError() { return $this->error; } public function setName($name) { $this->name = $name; return $this; } public function getName() { return $this->name; } public function setValue($value) { $this->value = $value; return $this; } public function getValue() { return $this->value; } public function isValid() { if ($this->error && $this->error !== true) { return false; } if ($this->isRequired() && $this->isEmpty()) { return false; } return true; } public function isRequired() { return $this->required; } public function isEmpty() { return !strlen($this->getValue()); } public function getSerializedValue() { return $this->getValue(); } public function readSerializedValue($value) { $this->setValue($value); return $this; } public function readValueFromRequest(AphrontRequest $request) { $this->setValue($request->getStr($this->getName())); return $this; } + public function readValueFromDictionary(array $dictionary) { + $this->setValue(idx($dictionary, $this->getName())); + return $this; + } + public function setFormPage(PHUIFormPageView $page) { if ($this->formPage) { throw new Exception("This control is already a member of a page!"); } $this->formPage = $page; return $this; } public function getFormPage() { if ($this->formPage === null) { throw new Exception("This control does not have a page!"); } return $this->formPage; } public function setDisabled($disabled) { $this->disabled = $disabled; return $this; } public function getDisabled() { return $this->disabled; } abstract protected function renderInput(); abstract protected function getCustomControlClass(); protected function shouldRender() { return true; } final public function render() { if (!$this->shouldRender()) { return null; } $custom_class = $this->getCustomControlClass(); if (strlen($this->getLabel())) { $label = phutil_tag( 'label', array('class' => 'aphront-form-label'), $this->getLabel()); } else { $label = null; $custom_class .= ' aphront-form-control-nolabel'; } $input = phutil_tag( 'div', array('class' => 'aphront-form-input'), $this->renderInput()); if (strlen($this->getError())) { $error = $this->getError(); if ($error === true) { $error = phutil_tag( 'div', array('class' => 'aphront-form-error aphront-form-required'), pht('Required')); } else { $error = phutil_tag( 'div', array('class' => 'aphront-form-error'), $error); } } else { $error = null; } if (strlen($this->getCaption())) { $caption = phutil_tag( 'div', array('class' => 'aphront-form-caption'), $this->getCaption()); } else { $caption = null; } $classes = array(); $classes[] = 'aphront-form-control'; $classes[] = $custom_class; $style = $this->controlStyle; if ($this->hidden) { $style = 'display: none; '.$style; } return phutil_tag( 'div', array( 'class' => implode(' ', $classes), 'id' => $this->controlID, 'style' => $style, ), array( $label, $error, $input, $caption, // TODO: Remove this once the redesign finishes up. phutil_tag('div', array('style' => 'clear: both;'), ''), )); } } diff --git a/src/view/form/control/PHUIFormMultiSubmitControl.php b/src/view/form/control/PHUIFormMultiSubmitControl.php index 17b12376a..ae632c549 100644 --- a/src/view/form/control/PHUIFormMultiSubmitControl.php +++ b/src/view/form/control/PHUIFormMultiSubmitControl.php @@ -1,38 +1,54 @@ addButton('__back__', $label, 'grey'); } public function addSubmitButton($label) { return $this->addButton('__submit__', $label); } + public function addCancelButton($uri, $label = null) { + if ($label === null) { + $label = pht('Cancel'); + } + + $this->buttons[] = phutil_tag( + 'a', + array( + 'class' => 'grey button', + 'href' => $uri, + ), + $label); + + return $this; + } + public function addButton($name, $label, $class = null) { $this->buttons[] = phutil_tag( 'input', array( 'type' => 'submit', 'name' => $name, 'value' => $label, 'class' => $class, 'disabled' => $this->getDisabled() ? 'disabled' : null, )); } protected function getCustomControlClass() { return 'phui-form-control-multi-submit'; } protected function renderInput() { return array_reverse($this->buttons); } } diff --git a/webroot/rsrc/css/phui/phui-form-view.css b/webroot/rsrc/css/phui/phui-form-view.css index c2937d3b6..004af717f 100644 --- a/webroot/rsrc/css/phui/phui-form-view.css +++ b/webroot/rsrc/css/phui/phui-form-view.css @@ -1,435 +1,436 @@ /** * @provides phui-form-view-css */ .phui-form-view { padding: 16px; background: #fff; } .phui-form-view.phui-form-full-width { padding: 0; } /* only used in transaction comments */ .phui-form-shaded .phui-form-view { border-bottom: 1px solid #D4DAE0; background: #F4F5F8; } .phui-form-view label.aphront-form-label { padding-top: 5px; width: 19%; float: left; text-align: right; font-weight: bold; font-size: 13px; color: {$bluetext}; -webkit-font-smoothing: antialiased; } .device-phone .phui-form-view label.aphront-form-label, .phui-form-full-width.phui-form-view label.aphront-form-label { display: block; float: none; text-align: left; width: 100%; margin-bottom: 3px; } .aphront-form-input { margin-left: 20%; margin-right: 20%; width: 60%; } .device-phone .aphront-form-input, .phui-form-full-width .aphront-form-input { margin-left: 0%; margin-right: 0%; width: 100%; } .aphront-form-error { width: 18%; float: right; color: {$red}; font-weight: bold; padding-top: 5px; } .aphront-dialog-body .phui-form-full-width { margin-top: -10px; } .aphront-dialog-body .phui-form-view { padding: 0; } .device-phone .aphront-form-error, .phui-form-full-width .aphront-form-error { float: none; width: 100%; } .device-phone .aphront-form-drag-and-drop-upload { display: none; } .aphront-form-required { font-weight: normal; color: {$lightgreytext}; font-size: 11px; -webkit-font-smoothing: antialiased; } .aphront-form-input input { width: 100%; } .aphront-form-input textarea { display: block; width: 100%; box-sizing: border-box; height: 12em; } .aphront-form-control { padding: 4px; } .phui-form-full-width .aphront-form-control { padding: 4px 0; } .aphront-form-control-submit button, .aphront-form-control-submit a.button { float: right; margin: 4px 0 0 8px; } -.phui-form-control-multi-submit input { +.phui-form-control-multi-submit input, +.phui-form-control-multi-submit a { float: right; margin: 0.5em 0 0em 2%; width: auto; } .aphront-form-control-textarea textarea.aphront-textarea-very-short { height: 44px; } .aphront-form-control-textarea textarea.aphront-textarea-very-tall { height: 24em; } .aphront-form-control-select .aphront-form-input { padding-top: 2px; } .phui-form-view .aphront-form-caption { font-size: 12px; color: {$bluetext}; padding: 8px 4px; text-align: right; margin-right: 20%; margin-left: 20%; -webkit-font-smoothing: antialiased; line-height: 15px; } .device-phone .phui-form-view .aphront-form-caption, .phui-form-full-width .phui-form-view .aphront-form-caption { margin-right: 0%; } /* override for when inside an aphront-panel-view */ .aphront-panel-view .phui-form-view h1 { padding: 0em 0em .8em 0em; } .aphront-form-instructions { width: 60%; margin-left: 20%; padding: 10px 4px; } .device .aphront-form-instructions, .phui-form-full-width .aphront-form-instructions { width: 100%; margin: 0; } .aphront-form-important { margin: .5em 0; background: #ffffdd; padding: .5em 1em; } .aphront-form-important code { display: block; padding: .25em; margin: .5em 2em; } .aphront-form-control-static .aphront-form-input, .aphront-form-control-markup .aphront-form-input { padding-top: 6px; font-size: 13px; } .aphront-form-control-togglebuttons .aphront-form-input { padding: 2px 0 0 0; } table.aphront-form-control-radio-layout, table.aphront-form-control-checkbox-layout { margin-top: 3px; font-size: 13px; } table.aphront-form-control-radio-layout th { padding-top: 3px; padding-left: 8px; padding-bottom: 4px; font-weight: bold; color: {$darkgreytext}; } table.aphront-form-control-checkbox-layout th { padding-top: 2px; padding-left: 8px; padding-bottom: 4px; color: {$darkgreytext}; } .aphront-form-control-radio-layout td input, .aphront-form-control-checkbox-layout td input { margin-top: 4px; width: auto; } .aphront-form-control-radio-layout label.disabled, .aphront-form-control-checkbox-layout label.disabled { color: {$greytext}; } .aphront-form-radio-caption { margin-top: 4px; font-size: 12px; font-weight: normal; color: #555; } .aphront-form-control-image span { margin: 0 4px 0 2px; } .aphront-form-control-image .default-image { display: inline; width: 12px; } .aphront-form-input hr { border: none; background: #bbbbbb; height: 1px; position: relative; } .aphront-form-inset { margin: 0 0 8px; padding: 8px; background: #fff; border: 1px solid #d4dae0; } .aphront-form-inset h1 { color: {$greytext}; font-weight: normal; padding-bottom: 8px; } .aphront-form-drag-and-drop-file-list { width: 400px; } .drag-and-drop-instructions { color: {$darkgreytext}; font-size: 11px; padding: 6px 8px; } .drag-and-drop-file-target { border: 1px dashed #bfbfbf; padding-top: 12px; padding-bottom: 12px; } .aphront-textarea-drag-and-drop { background: {$lightgreen}; border-color: {$green}; } .aphront-form-crop .crop-box { cursor: move; overflow: hidden; } .aphront-form-crop .crop-box .crop-image { position: relative; top: 0px; left: 0px; } .calendar-button { display: inline; background: url(/rsrc/image/icon/fatcow/calendar_edit.png) no-repeat center center; padding: 8px 12px; margin: 2px 8px 2px 2px; position: relative; border: 1px solid transparent; } .aphront-form-date-container { position: relative; display: inline; } .aphront-form-date-container select { margin: 2px; display: inline; } .aphront-form-date-container input.aphront-form-date-enabled-input { width: auto; display: inline; margin-right: 8px; font-size: 16px; } .aphront-form-date-container input.aphront-form-date-time-input { width: 7em; display: inline; } .fancy-datepicker { position: absolute; width: 240px; } .fancy-datepicker-core { padding: 1px; font-size: 11px; font-family: Verdana; text-align: center; } .fancy-datepicker-core .month-table, .fancy-datepicker-core .day-table { margin: 0 auto; border-collapse: separate; border-spacing: 1px; width: 100%; } .fancy-datepicker-core .month-table { margin-bottom: 6px; } .fancy-datepicker-core .month-table td.lrbutton { width: 20%; } .fancy-datepicker-core .month-table td { padding: 4px; font-weight: bold; color: {$darkgreytext}; } .fancy-datepicker-core .month-table td.lrbutton { background: #e6e6e6; border: 1px solid; border-color: #a6a6a6 #969696 #868686 #a6a6a6; } .fancy-datepicker-core .day-table td { overflow: hidden; background: #f6f6f6; vertical-align: center; text-align: center; border: 1px solid #d6d6d6; padding: 4px 0; } .fancy-datepicker-core .day-table td.day-placeholder { border-color: transparent; background: transparent; } .fancy-datepicker-core .day-table td.weekend { color: {$greytext}; border-color: #e6e6e6; } .fancy-datepicker-core .day-table td.day-name { background: transparent; border: 1px transparent; vertical-align: bottom; color: {$lightgreytext}; } .fancy-datepicker-core .day-table td.today { background: #eeee99; border-color: #aaaa66; } .fancy-datepicker-core .day-table td.datepicker-selected { background: #0099ff; border-color: #0066cc; } .fancy-datepicker-core td { cursor: pointer; } .fancy-datepicker-core td.novalue { cursor: inherit; } .picker-open .calendar-button, .fancy-datepicker-core { background-color: white; border: 1px solid {$greytext}; box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.25); } .picker-open .calendar-button { border-left: 1px solid white; } .login-to-comment { padding: 12px; float: right; } .phui-form-divider hr { height: 1px; border: 0; background: #c0c0c0; width: 85%; margin: 15px auto; } .recaptcha_only_if_privacy { display: none; } .phabricator-standard-custom-field-header { font-size: 16px; color: {$bluetext}; border-bottom: 1px solid {$lightbluetext}; padding: 16px 0 4px; margin-bottom: 4px; }