{"action":"created","comment":{"url":"https://api.github.com/repos/LionsAd/file_dropzone/pulls/comments/42601024","id":42601024,"diff_hunk":"@@ -0,0 +1,290 @@\n+<?php\n+\n+/**\n+ * @file\n+ * File Dropzone for every file or media field element.\n+ */\n+\n+/**\n+ * Implements hook_menu().\n+ */\n+function file_dropzone_menu() {\n+  $items['file_dropzone/ajax'] = array(\n+    'page callback' => 'file_dropzone_ajax_upload',\n+    'delivery callback' => 'ajax_deliver',\n+    'access arguments' => array('access content'),\n+    'theme callback' => 'ajax_base_page_theme',\n+    'type' => MENU_CALLBACK,\n+  );\n+\n+  return $items;\n+}\n+\n+/**\n+ * Menu callback; Shared Ajax callback for file uploads and deletions.\n+ *\n+ * This rebuilds the form element for a particular field item. As long as the\n+ * form processing is properly encapsulated in the widget element the form\n+ * should rebuild correctly using FAPI without the need for additional callbacks\n+ * or processing.\n+ */\n+function file_dropzone_ajax_upload() {\n+  $form_parents = func_get_args();\n+  $form_build_id = (string) array_pop($form_parents);\n+\n+  $lock_name = __FUNCTION__ . '_' . $form_build_id;\n+\n+  if (empty($_POST['form_build_id']) || $form_build_id != $_POST['form_build_id']) {\n+    return file_dropzone_error_exit(t('An unrecoverable error occurred. The uploaded file likely exceeded the maximum file size (@size) that this server supports.', array('@size' => format_size(file_upload_max_size()))));\n+  }\n+\n+  // Unset HTML IDs to ensure element is correctly returned.\n+  unset($_POST['ajax_html_ids']);\n+\n+  // Ensure parallel uploads are handled correctly.\n+  $retries = 0;\n+  while (!lock_acquire($lock_name, 30)) {\n+    $retries++;\n+    if ($retries > 5) {\n+      return file_dropzone_error_exit(t('An unrecoverable error occurred. There was a timeout while waiting for the upload lock. Please try again later.'), 'HTTP/1.0 500 Internal server error');\n+    }\n+\n+    // Another request got the lock, wait for it to finish.\n+    lock_wait($lock_name, 60);\n+  }\n+\n+  // Rebuild the current state\n+  list($form, $form_state, $form_id, $form_build_id, $commands) = ajax_get_form();\n+  $form_state['input'] = FALSE;\n+  $form_state['rebuild'] = TRUE;\n+\n+  drupal_process_form($form['#form_id'], $form, $form_state);\n+\n+  $old_values = $form_state['values'];\n+\n+  $results = array();\n+  $index = 0;\n+\n+  if (empty($_POST['dropzone_actions'])) {\n+    $_POST['dropzone_actions'][] = array(\n+      'type' => 'legacy',\n+      'fid' => -1,\n+    );\n+  }\n+\n+  while (!empty($_POST['dropzone_actions'])) {\n+    $form = array();\n+    $form_state = array();\n+    $form_id = NULL;\n+    $form_build_id = NULL;\n+    $commands = array();\n+\n+    drupal_static_reset('drupal_html_id');\n+\n+    // Retrieve current form and form state.\n+    list($form, $form_state, $form_id, $form_build_id, $commands) = ajax_get_form();\n+\n+    if (!$form) {\n+      lock_release($lock_name);\n+      return file_dropzone_error_exit(t('An unrecoverable error occurred. Use of this form has expired. Try reloading the page and submitting again.'));\n+    }\n+\n+    // Get the current element and count the number of files.\n+    $current_element = $form;\n+    foreach ($form_parents as $parent) {\n+      $current_element = $current_element[$parent];\n+    }\n+    $current_file_count = isset($current_element['#file_upload_delta']) ? $current_element['#file_upload_delta'] : 0;\n+\n+    // Now we are ready for processing.\n+    $upload_name = implode('_', $form_parents);\n+\n+    $file_upload_name = $upload_name . '_' . $current_file_count;\n+    $triggering_element_name = $file_upload_name . '_upload_button';\n+\n+    $remove_fid = FALSE;\n+    $attach_fid = FALSE;\n+\n+    $action = array_shift($_POST['dropzone_actions']);\n+    if (!is_array($action)) {\n+      $action = (array) json_decode($action);\n+    }\n+    if (empty($action)) {\n+      return file_dropzone_error_exit(t('Error: Found empty action when trying to process files.'));\n+    }\n+\n+    switch ($action['type']) {\n+      case 'upload':\n+        foreach ($_FILES['files'] as $key => $values) {\n+          $_FILES['files'][$key][$file_upload_name] = array_shift($_FILES['files'][$key]['dropzone_files']);\n+        }\n+        break;\n+\n+      case 'attach':\n+        $attach_fid = $action['fid'];\n+        break;\n+\n+      case 'remove':\n+        $remove_fid = $action['fid'];\n+        break;\n+\n+      case 'legacy':\n+        // Intentionally do nothing.\n+        break;\n+\n+      default:\n+        return file_dropzone_error_exit(t('Unknown action type \"@action\" when trying to process files.', array('@action' => $action['type'])));\n+    }\n+\n+    if (strpos($_POST['_triggering_element_name'], '_remove_button') === FALSE) {\n+      $_POST['_triggering_element_name'] = $triggering_element_name;\n+\n+      // Update field items based on current form state.\n+      $field_name = $current_element['#field_name'];\n+      $langcode = $current_element['#language'];\n+      $parents = $current_element['#field_parents'];\n+\n+      $items = $old_values[$field_name][$langcode];\n+\n+      if (!empty($items)) {\n+        // Normalize the weight.\n+        uasort($items, function($a, $b) {\n+          $a_weight = (is_array($a) && isset($a['_weight'])) ? $a['_weight'] : 0;\n+          $b_weight = (is_array($b) && isset($b['_weight'])) ? $b['_weight'] : 0;\n+\n+          if ($a_weight == $b_weight) {\n+            return 0;\n+          }\n+\n+          return ($a_weight < $b_weight) ? -1 : 1;\n+        });\n+\n+        $items = array_filter($items, function($item) { if (empty($item['fid'])) { return FALSE; } return TRUE; });\n+        $items = array_values($items);\n+\n+        foreach ($items as $delta => $item) {\n+          $items[$delta] = array_intersect_key($item, array_flip(array('_weight', 'fid', 'display')));\n+          $items[$delta]['_weight'] = $delta;\n+        }\n+\n+        $items[] = array(\n+          '_weight' => $current_file_count,\n+          'fid' => 0,\n+          'display' => 1,\n+        );\n+\n+        $_POST[$field_name][$langcode] = $items;\n+      }\n+\n+      if ($remove_fid) {\n+        foreach ($_POST[$field_name][$langcode] as $delta => $item) {\n+          if ($item['fid'] == $remove_fid) {\n+            $triggering_element_name = $upload_name . '_' . $delta . '_remove_button';\n+            $_POST['_triggering_element_name'] = $triggering_element_name;\n+            $_POST['_triggering_element_value'] = t('Remove');\n+            unset($_POST['files']);\n+            foreach (array('name', 'type', 'tmp_name', 'error', 'size', 'orig_name') as $key) {\n+              $_FILES['files'][$key][$file_upload_name] = '';\n+              if ($key == 'error') {\n+                $_FILES['files'][$key][$file_upload_name] = 4;\n+              }\n+              if ($key == 'size') {\n+                $_FILES['files'][$key][$file_upload_name] = 0;\n+              }\n+            }\n+          }\n+        }\n+      }\n+\n+      if ($attach_fid) {\n+        $triggering_element_name = $file_upload_name . '_attach_button';\n+\n+        $_POST['_triggering_element_name'] = $triggering_element_name;\n+        $_POST['_triggering_element_value'] = t('Attach');\n+        $_POST['media'][$file_upload_name] = $attach_fid;\n+      }\n+    }\n+\n+    $_REQUEST = $_POST + $_GET;\n+\n+    // Update the form input with the new post values.\n+    $form_state['input'] = $_POST;\n+\n+    // Process user input. $form and $form_state are modified in the process.\n+    drupal_process_form($form['#form_id'], $form, $form_state);\n+\n+    $results[$index] = array(\n+      'status' => 201,\n+      'message' => 'OK',\n+      'fid' => 0,\n+    );\n+\n+    $messages = theme('status_messages', array('display' => 'error'));\n+    if (!empty($messages)) {\n+      $results[$index] = array(\n+        'status' => 400,\n+        'message' => $messages,\n+        'fid' => -1,\n+      );\n+    }\n+\n+    $index++;\n+  }\n+\n+  lock_release($lock_name);\n+\n+  // Retrieve the element to be rendered.\n+  foreach ($form_parents as $parent) {\n+    $form = $form[$parent];\n+  }\n+\n+  // Add the special Ajax class if a new file was added.\n+  if (isset($form['#file_upload_delta']) && $current_file_count < $form['#file_upload_delta']) {\n+    $form[$current_file_count]['#attributes']['class'][] = 'ajax-new-content';\n+  }\n+  // Otherwise just add the new content class on a placeholder.\n+  else {\n+    $form['#suffix'] .= '<span class=\"ajax-new-content\"></span>';\n+  }\n+\n+  $output = theme('status_messages') . drupal_render($form);\n+  $js = drupal_add_js();\n+  $settings = call_user_func_array('array_merge_recursive', $js['settings']['data']);\n+\n+  $commands[] = ajax_command_replace(NULL, $output, $settings);\n+  $commands[] = array( 'command' => 'dropzoneFiles', 'results' => $results );\n+  return array('#type' => 'ajax', '#commands' => $commands);\n+}\n+\n+function file_dropzone_error_exit($message, $status_header = 'HTTP/1.0 400 Bad request') {\n+    header($status_header);\n+    print strip_tags($message);\n+    exit();\n+}\n+\n+/**\n+ * Process callback for the file managed field element.\n+ */\n+function file_dropzone_file_field_widget_process($element, &$form_state, $form) {\n+  $field = field_widget_field($element, $form_state);\n+\n+  // Adjust the Ajax settings so that on upload and remove of any individual\n+  // file, the entire group of file fields is updated together.\n+  // Also add our file_dropzone menu callback.\n+  // @todo Make cardinality 1 work.","path":"file_dropzone.module","position":274,"original_position":274,"commit_id":"a82dedd95b417ea164a6d9de985c8c8112fd191a","original_commit_id":"a82dedd95b417ea164a6d9de985c8c8112fd191a","user":{"login":"damiankloip","id":1053891,"avatar_url":"https://avatars.githubusercontent.com/u/1053891?v=3","gravatar_id":"","url":"https://api.github.com/users/damiankloip","html_url":"https://github.com/damiankloip","followers_url":"https://api.github.com/users/damiankloip/followers","following_url":"https://api.github.com/users/damiankloip/following{/other_user}","gists_url":"https://api.github.com/users/damiankloip/gists{/gist_id}","starred_url":"https://api.github.com/users/damiankloip/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/damiankloip/subscriptions","organizations_url":"https://api.github.com/users/damiankloip/orgs","repos_url":"https://api.github.com/users/damiankloip/repos","events_url":"https://api.github.com/users/damiankloip/events{/privacy}","received_events_url":"https://api.github.com/users/damiankloip/received_events","type":"User","site_admin":false},"body":"Wouldn't this currently cause issues for anything other than CARDINALITY_UNLIMITED? So could just check for that?","created_at":"2015-10-21T09:24:27Z","updated_at":"2015-10-21T09:24:27Z","html_url":"https://github.com/LionsAd/file_dropzone/pull/1#discussion_r42601024","pull_request_url":"https://api.github.com/repos/LionsAd/file_dropzone/pulls/1","_links":{"self":{"href":"https://api.github.com/repos/LionsAd/file_dropzone/pulls/comments/42601024"},"html":{"href":"https://github.com/LionsAd/file_dropzone/pull/1#discussion_r42601024"},"pull_request":{"href":"https://api.github.com/repos/LionsAd/file_dropzone/pulls/1"}}},"pull_request":{"url":"https://api.github.com/repos/LionsAd/file_dropzone/pulls/1","id":48220749,"html_url":"https://github.com/LionsAd/file_dropzone/pull/1","diff_url":"https://github.com/LionsAd/file_dropzone/pull/1.diff","patch_url":"https://github.com/LionsAd/file_dropzone/pull/1.patch","issue_url":"https://api.github.com/repos/LionsAd/file_dropzone/issues/1","number":1,"state":"open","locked":false,"title":"7.x 1.x","user":{"login":"LionsAd","id":354804,"avatar_url":"https://avatars.githubusercontent.com/u/354804?v=3","gravatar_id":"","url":"https://api.github.com/users/LionsAd","html_url":"https://github.com/LionsAd","followers_url":"https://api.github.com/users/LionsAd/followers","following_url":"https://api.github.com/users/LionsAd/following{/other_user}","gists_url":"https://api.github.com/users/LionsAd/gists{/gist_id}","starred_url":"https://api.github.com/users/LionsAd/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/LionsAd/subscriptions","organizations_url":"https://api.github.com/users/LionsAd/orgs","repos_url":"https://api.github.com/users/LionsAd/repos","events_url":"https://api.github.com/users/LionsAd/events{/privacy}","received_events_url":"https://api.github.com/users/LionsAd/received_events","type":"User","site_admin":false},"body":"","created_at":"2015-10-20T15:56:19Z","updated_at":"2015-10-21T09:24:27Z","closed_at":null,"merged_at":null,"merge_commit_sha":"899f5c02fe7f0f9d758f7fecca0b2d0e08f2e844","assignee":null,"milestone":null,"commits_url":"https://api.github.com/repos/LionsAd/file_dropzone/pulls/1/commits","review_comments_url":"https://api.github.com/repos/LionsAd/file_dropzone/pulls/1/comments","review_comment_url":"https://api.github.com/repos/LionsAd/file_dropzone/pulls/comments{/number}","comments_url":"https://api.github.com/repos/LionsAd/file_dropzone/issues/1/comments","statuses_url":"https://api.github.com/repos/LionsAd/file_dropzone/statuses/a82dedd95b417ea164a6d9de985c8c8112fd191a","head":{"label":"LionsAd:7.x-1.x","ref":"7.x-1.x","sha":"a82dedd95b417ea164a6d9de985c8c8112fd191a","user":{"login":"LionsAd","id":354804,"avatar_url":"https://avatars.githubusercontent.com/u/354804?v=3","gravatar_id":"","url":"https://api.github.com/users/LionsAd","html_url":"https://github.com/LionsAd","followers_url":"https://api.github.com/users/LionsAd/followers","following_url":"https://api.github.com/users/LionsAd/following{/other_user}","gists_url":"https://api.github.com/users/LionsAd/gists{/gist_id}","starred_url":"https://api.github.com/users/LionsAd/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/LionsAd/subscriptions","organizations_url":"https://api.github.com/users/LionsAd/orgs","repos_url":"https://api.github.com/users/LionsAd/repos","events_url":"https://api.github.com/users/LionsAd/events{/privacy}","received_events_url":"https://api.github.com/users/LionsAd/received_events","type":"User","site_admin":false},"repo":{"id":44318647,"name":"file_dropzone","full_name":"LionsAd/file_dropzone","owner":{"login":"LionsAd","id":354804,"avatar_url":"https://avatars.githubusercontent.com/u/354804?v=3","gravatar_id":"","url":"https://api.github.com/users/LionsAd","html_url":"https://github.com/LionsAd","followers_url":"https://api.github.com/users/LionsAd/followers","following_url":"https://api.github.com/users/LionsAd/following{/other_user}","gists_url":"https://api.github.com/users/LionsAd/gists{/gist_id}","starred_url":"https://api.github.com/users/LionsAd/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/LionsAd/subscriptions","organizations_url":"https://api.github.com/users/LionsAd/orgs","repos_url":"https://api.github.com/users/LionsAd/repos","events_url":"https://api.github.com/users/LionsAd/events{/privacy}","received_events_url":"https://api.github.com/users/LionsAd/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/LionsAd/file_dropzone","description":"GitHub Mirror for automated testing of file_dropzone on drupal.org","fork":false,"url":"https://api.github.com/repos/LionsAd/file_dropzone","forks_url":"https://api.github.com/repos/LionsAd/file_dropzone/forks","keys_url":"https://api.github.com/repos/LionsAd/file_dropzone/keys{/key_id}","collaborators_url":"https://api.github.com/repos/LionsAd/file_dropzone/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/LionsAd/file_dropzone/teams","hooks_url":"https://api.github.com/repos/LionsAd/file_dropzone/hooks","issue_events_url":"https://api.github.com/repos/LionsAd/file_dropzone/issues/events{/number}","events_url":"https://api.github.com/repos/LionsAd/file_dropzone/events","assignees_url":"https://api.github.com/repos/LionsAd/file_dropzone/assignees{/user}","branches_url":"https://api.github.com/repos/LionsAd/file_dropzone/branches{/branch}","tags_url":"https://api.github.com/repos/LionsAd/file_dropzone/tags","blobs_url":"https://api.github.com/repos/LionsAd/file_dropzone/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/LionsAd/file_dropzone/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/LionsAd/file_dropzone/git/refs{/sha}","trees_url":"https://api.github.com/repos/LionsAd/file_dropzone/git/trees{/sha}","statuses_url":"https://api.github.com/repos/LionsAd/file_dropzone/statuses/{sha}","languages_url":"https://api.github.com/repos/LionsAd/file_dropzone/languages","stargazers_url":"https://api.github.com/repos/LionsAd/file_dropzone/stargazers","contributors_url":"https://api.github.com/repos/LionsAd/file_dropzone/contributors","subscribers_url":"https://api.github.com/repos/LionsAd/file_dropzone/subscribers","subscription_url":"https://api.github.com/repos/LionsAd/file_dropzone/subscription","commits_url":"https://api.github.com/repos/LionsAd/file_dropzone/commits{/sha}","git_commits_url":"https://api.github.com/repos/LionsAd/file_dropzone/git/commits{/sha}","comments_url":"https://api.github.com/repos/LionsAd/file_dropzone/comments{/number}","issue_comment_url":"https://api.github.com/repos/LionsAd/file_dropzone/issues/comments{/number}","contents_url":"https://api.github.com/repos/LionsAd/file_dropzone/contents/{+path}","compare_url":"https://api.github.com/repos/LionsAd/file_dropzone/compare/{base}...{head}","merges_url":"https://api.github.com/repos/LionsAd/file_dropzone/merges","archive_url":"https://api.github.com/repos/LionsAd/file_dropzone/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/LionsAd/file_dropzone/downloads","issues_url":"https://api.github.com/repos/LionsAd/file_dropzone/issues{/number}","pulls_url":"https://api.github.com/repos/LionsAd/file_dropzone/pulls{/number}","milestones_url":"https://api.github.com/repos/LionsAd/file_dropzone/milestones{/number}","notifications_url":"https://api.github.com/repos/LionsAd/file_dropzone/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/LionsAd/file_dropzone/labels{/name}","releases_url":"https://api.github.com/repos/LionsAd/file_dropzone/releases{/id}","created_at":"2015-10-15T13:17:29Z","updated_at":"2015-10-15T13:17:29Z","pushed_at":"2015-10-20T15:56:19Z","git_url":"git://github.com/LionsAd/file_dropzone.git","ssh_url":"git@github.com:LionsAd/file_dropzone.git","clone_url":"https://github.com/LionsAd/file_dropzone.git","svn_url":"https://github.com/LionsAd/file_dropzone","homepage":null,"size":0,"stargazers_count":0,"watchers_count":0,"language":null,"has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":1,"forks":0,"open_issues":1,"watchers":0,"default_branch":"master"}},"base":{"label":"LionsAd:master","ref":"master","sha":"95580e8a424556692fd502bb2b2d6b8e1db25682","user":{"login":"LionsAd","id":354804,"avatar_url":"https://avatars.githubusercontent.com/u/354804?v=3","gravatar_id":"","url":"https://api.github.com/users/LionsAd","html_url":"https://github.com/LionsAd","followers_url":"https://api.github.com/users/LionsAd/followers","following_url":"https://api.github.com/users/LionsAd/following{/other_user}","gists_url":"https://api.github.com/users/LionsAd/gists{/gist_id}","starred_url":"https://api.github.com/users/LionsAd/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/LionsAd/subscriptions","organizations_url":"https://api.github.com/users/LionsAd/orgs","repos_url":"https://api.github.com/users/LionsAd/repos","events_url":"https://api.github.com/users/LionsAd/events{/privacy}","received_events_url":"https://api.github.com/users/LionsAd/received_events","type":"User","site_admin":false},"repo":{"id":44318647,"name":"file_dropzone","full_name":"LionsAd/file_dropzone","owner":{"login":"LionsAd","id":354804,"avatar_url":"https://avatars.githubusercontent.com/u/354804?v=3","gravatar_id":"","url":"https://api.github.com/users/LionsAd","html_url":"https://github.com/LionsAd","followers_url":"https://api.github.com/users/LionsAd/followers","following_url":"https://api.github.com/users/LionsAd/following{/other_user}","gists_url":"https://api.github.com/users/LionsAd/gists{/gist_id}","starred_url":"https://api.github.com/users/LionsAd/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/LionsAd/subscriptions","organizations_url":"https://api.github.com/users/LionsAd/orgs","repos_url":"https://api.github.com/users/LionsAd/repos","events_url":"https://api.github.com/users/LionsAd/events{/privacy}","received_events_url":"https://api.github.com/users/LionsAd/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/LionsAd/file_dropzone","description":"GitHub Mirror for automated testing of file_dropzone on drupal.org","fork":false,"url":"https://api.github.com/repos/LionsAd/file_dropzone","forks_url":"https://api.github.com/repos/LionsAd/file_dropzone/forks","keys_url":"https://api.github.com/repos/LionsAd/file_dropzone/keys{/key_id}","collaborators_url":"https://api.github.com/repos/LionsAd/file_dropzone/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/LionsAd/file_dropzone/teams","hooks_url":"https://api.github.com/repos/LionsAd/file_dropzone/hooks","issue_events_url":"https://api.github.com/repos/LionsAd/file_dropzone/issues/events{/number}","events_url":"https://api.github.com/repos/LionsAd/file_dropzone/events","assignees_url":"https://api.github.com/repos/LionsAd/file_dropzone/assignees{/user}","branches_url":"https://api.github.com/repos/LionsAd/file_dropzone/branches{/branch}","tags_url":"https://api.github.com/repos/LionsAd/file_dropzone/tags","blobs_url":"https://api.github.com/repos/LionsAd/file_dropzone/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/LionsAd/file_dropzone/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/LionsAd/file_dropzone/git/refs{/sha}","trees_url":"https://api.github.com/repos/LionsAd/file_dropzone/git/trees{/sha}","statuses_url":"https://api.github.com/repos/LionsAd/file_dropzone/statuses/{sha}","languages_url":"https://api.github.com/repos/LionsAd/file_dropzone/languages","stargazers_url":"https://api.github.com/repos/LionsAd/file_dropzone/stargazers","contributors_url":"https://api.github.com/repos/LionsAd/file_dropzone/contributors","subscribers_url":"https://api.github.com/repos/LionsAd/file_dropzone/subscribers","subscription_url":"https://api.github.com/repos/LionsAd/file_dropzone/subscription","commits_url":"https://api.github.com/repos/LionsAd/file_dropzone/commits{/sha}","git_commits_url":"https://api.github.com/repos/LionsAd/file_dropzone/git/commits{/sha}","comments_url":"https://api.github.com/repos/LionsAd/file_dropzone/comments{/number}","issue_comment_url":"https://api.github.com/repos/LionsAd/file_dropzone/issues/comments{/number}","contents_url":"https://api.github.com/repos/LionsAd/file_dropzone/contents/{+path}","compare_url":"https://api.github.com/repos/LionsAd/file_dropzone/compare/{base}...{head}","merges_url":"https://api.github.com/repos/LionsAd/file_dropzone/merges","archive_url":"https://api.github.com/repos/LionsAd/file_dropzone/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/LionsAd/file_dropzone/downloads","issues_url":"https://api.github.com/repos/LionsAd/file_dropzone/issues{/number}","pulls_url":"https://api.github.com/repos/LionsAd/file_dropzone/pulls{/number}","milestones_url":"https://api.github.com/repos/LionsAd/file_dropzone/milestones{/number}","notifications_url":"https://api.github.com/repos/LionsAd/file_dropzone/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/LionsAd/file_dropzone/labels{/name}","releases_url":"https://api.github.com/repos/LionsAd/file_dropzone/releases{/id}","created_at":"2015-10-15T13:17:29Z","updated_at":"2015-10-15T13:17:29Z","pushed_at":"2015-10-20T15:56:19Z","git_url":"git://github.com/LionsAd/file_dropzone.git","ssh_url":"git@github.com:LionsAd/file_dropzone.git","clone_url":"https://github.com/LionsAd/file_dropzone.git","svn_url":"https://github.com/LionsAd/file_dropzone","homepage":null,"size":0,"stargazers_count":0,"watchers_count":0,"language":null,"has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":1,"forks":0,"open_issues":1,"watchers":0,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/LionsAd/file_dropzone/pulls/1"},"html":{"href":"https://github.com/LionsAd/file_dropzone/pull/1"},"issue":{"href":"https://api.github.com/repos/LionsAd/file_dropzone/issues/1"},"comments":{"href":"https://api.github.com/repos/LionsAd/file_dropzone/issues/1/comments"},"review_comments":{"href":"https://api.github.com/repos/LionsAd/file_dropzone/pulls/1/comments"},"review_comment":{"href":"https://api.github.com/repos/LionsAd/file_dropzone/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/LionsAd/file_dropzone/pulls/1/commits"},"statuses":{"href":"https://api.github.com/repos/LionsAd/file_dropzone/statuses/a82dedd95b417ea164a6d9de985c8c8112fd191a"}}}}