{"action":"created","comment":{"url":"https://api.github.com/repos/endlessm/eos-knowledge-lib/pulls/comments/91641878","pull_request_review_id":12152777,"id":91641878,"diff_hunk":"@@ -0,0 +1,580 @@\n+/* Copyright 2016 Endless Mobile, Inc. */\n+\n+#include \"eknc-content-object-model.h\"\n+#include \"eknc-content-object-model-private.h\"\n+\n+#include <string.h>\n+#include \"eknc-utils-private.h\"\n+\n+/**\n+ * SECTION:content-object-model\n+ * @title: Content Object Model\n+ * @short_description: Access content object metadata\n+ *\n+ * A #EkncContentObjectModel is the base class for all content objects in the\n+ * knowledge app.\n+ */\n+typedef struct {\n+  gchar *ekn_id;\n+  gchar *title;\n+  gchar *original_title;\n+  gchar *original_uri;\n+  gchar *thumbnail_uri;\n+  gchar *language;\n+  gchar *copyright_holder;\n+  gchar *source_uri;\n+  gchar *content_type;\n+  gchar *synopsis;\n+  gchar *last_modified_date;\n+  gchar *license;\n+  gboolean featured;\n+  GVariant *tags;\n+  GVariant *resources;\n+} EkncContentObjectModelPrivate;\n+\n+G_DEFINE_TYPE_WITH_PRIVATE (EkncContentObjectModel,\n+                            eknc_content_object_model,\n+                            G_TYPE_OBJECT)\n+\n+enum {\n+  PROP_0,\n+  PROP_EKN_ID,\n+  PROP_TITLE,\n+  PROP_ORIGINAL_TITLE,\n+  PROP_ORIGINAL_URI,\n+  PROP_THUMBNAIL_URI,\n+  PROP_LANGUAGE,\n+  PROP_COPYRIGHT_HOLDER,\n+  PROP_SOURCE_URI,\n+  PROP_CONTENT_TYPE,\n+  PROP_SYNOPSIS,\n+  PROP_LAST_MODIFIED_DATE,\n+  PROP_LICENSE,\n+  PROP_FEATURED,\n+  PROP_TAGS,\n+  PROP_RESOURCES,\n+  NPROPS\n+};\n+\n+static GParamSpec *eknc_content_object_model_props [NPROPS] = { NULL, };\n+\n+static void\n+eknc_content_object_model_get_property (GObject    *object,\n+                                        guint       prop_id,\n+                                        GValue     *value,\n+                                        GParamSpec *pspec)\n+{\n+  EkncContentObjectModel *self = EKNC_CONTENT_OBJECT_MODEL (object);\n+  EkncContentObjectModelPrivate *priv = eknc_content_object_model_get_instance_private (self);\n+\n+  switch (prop_id)\n+    {\n+    case PROP_EKN_ID:\n+      g_value_set_string (value, priv->ekn_id);\n+      break;\n+\n+    case PROP_TITLE:\n+      g_value_set_string (value, priv->title);\n+      break;\n+\n+    case PROP_ORIGINAL_TITLE:\n+      g_value_set_string (value, priv->original_title);\n+      break;\n+\n+    case PROP_ORIGINAL_URI:\n+      g_value_set_string (value, priv->original_uri);\n+      break;\n+\n+    case PROP_THUMBNAIL_URI:\n+      g_value_set_string (value, priv->thumbnail_uri);\n+      break;\n+\n+    case PROP_LANGUAGE:\n+      g_value_set_string (value, priv->language);\n+      break;\n+\n+    case PROP_COPYRIGHT_HOLDER:\n+      g_value_set_string (value, priv->copyright_holder);\n+      break;\n+\n+    case PROP_SOURCE_URI:\n+      g_value_set_string (value, priv->source_uri);\n+      break;\n+\n+    case PROP_CONTENT_TYPE:\n+      g_value_set_string (value, priv->content_type);\n+      break;\n+\n+    case PROP_SYNOPSIS:\n+      g_value_set_string (value, priv->synopsis);\n+      break;\n+\n+    case PROP_LAST_MODIFIED_DATE:\n+      g_value_set_string (value, priv->last_modified_date);\n+      break;\n+\n+    case PROP_LICENSE:\n+      g_value_set_string (value, priv->license);\n+      break;\n+\n+    case PROP_FEATURED:\n+      g_value_set_boolean (value, priv->featured);\n+      break;\n+\n+    case PROP_TAGS:\n+      g_value_set_variant (value, priv->tags);\n+      break;\n+\n+    case PROP_RESOURCES:\n+      g_value_set_variant (value, priv->resources);\n+      break;\n+\n+    default:\n+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);\n+    }\n+}\n+\n+static void\n+eknc_content_object_model_set_property (GObject *object,\n+                                        guint prop_id,\n+                                        const GValue *value,\n+                                        GParamSpec *pspec)\n+{\n+  EkncContentObjectModel *self = EKNC_CONTENT_OBJECT_MODEL (object);\n+  EkncContentObjectModelPrivate *priv = eknc_content_object_model_get_instance_private (self);\n+\n+  switch (prop_id)\n+    {\n+    case PROP_EKN_ID:\n+      g_free (priv->ekn_id);\n+      priv->ekn_id = g_value_dup_string (value);\n+      break;\n+\n+    case PROP_TITLE:\n+      g_free (priv->title);\n+      priv->title = g_value_dup_string (value);\n+      break;\n+\n+    case PROP_ORIGINAL_TITLE:\n+      g_free (priv->original_title);\n+      priv->original_title = g_value_dup_string (value);\n+      break;\n+\n+    case PROP_ORIGINAL_URI:\n+      g_free (priv->original_uri);\n+      priv->original_uri = g_value_dup_string (value);\n+      break;\n+\n+    case PROP_THUMBNAIL_URI:\n+      g_free (priv->thumbnail_uri);\n+      priv->thumbnail_uri = g_value_dup_string (value);\n+      break;\n+\n+    case PROP_LANGUAGE:\n+      g_free (priv->language);\n+      priv->language = g_value_dup_string (value);\n+      break;\n+\n+    case PROP_COPYRIGHT_HOLDER:\n+      g_free (priv->copyright_holder);\n+      priv->copyright_holder = g_value_dup_string (value);\n+      break;\n+\n+    case PROP_SOURCE_URI:\n+      g_free (priv->source_uri);\n+      priv->source_uri = g_value_dup_string (value);\n+      break;\n+\n+    case PROP_CONTENT_TYPE:\n+      g_free (priv->content_type);\n+      priv->content_type = g_value_dup_string (value);\n+      break;\n+\n+    case PROP_SYNOPSIS:\n+      g_free (priv->synopsis);\n+      priv->synopsis = g_value_dup_string (value);\n+      break;\n+\n+    case PROP_LAST_MODIFIED_DATE:\n+      g_free (priv->last_modified_date);\n+      priv->last_modified_date = g_value_dup_string (value);\n+      break;\n+\n+    case PROP_LICENSE:\n+      g_free (priv->license);\n+      priv->license = g_value_dup_string (value);\n+      break;\n+\n+    case PROP_FEATURED:\n+      priv->featured = g_value_get_boolean (value);\n+      break;\n+\n+    case PROP_TAGS:\n+      g_clear_pointer (&priv->tags, g_variant_unref);\n+      priv->tags = g_value_dup_variant (value);\n+      break;\n+\n+    case PROP_RESOURCES:\n+      g_clear_pointer (&priv->resources, g_variant_unref);\n+      priv->resources = g_value_dup_variant (value);\n+      break;\n+\n+    default:\n+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);\n+    }\n+}\n+\n+static void\n+eknc_content_object_model_constructed (GObject *object)\n+{\n+  EkncContentObjectModel *self = EKNC_CONTENT_OBJECT_MODEL (object);\n+  EkncContentObjectModelPrivate *priv = eknc_content_object_model_get_instance_private (self);\n+\n+  if (g_strcmp0 (priv->ekn_id, \"\") == 0)\n+    {\n+      // Note: This is only for ensuring the invariant of \"each model has an\n+      // EKN ID\" in tests. It is illegal to create a model in production code\n+      // with no EKN ID.\n+      g_autofree gchar *sum = NULL;\n+      static guint64 MOCKED_OBJECTS = 0;\n+      sum = g_compute_checksum_for_data (G_CHECKSUM_SHA1,\n+                                         (guchar *) &MOCKED_OBJECTS,\n+                                         sizeof (MOCKED_OBJECTS));\n+      MOCKED_OBJECTS++;\n+      priv->ekn_id = g_strconcat (\"ekn:///\", sum, NULL);\n+    }\n+}\n+\n+static void\n+eknc_content_object_model_finalize (GObject *object)\n+{\n+  EkncContentObjectModel *self = EKNC_CONTENT_OBJECT_MODEL (object);\n+  EkncContentObjectModelPrivate *priv = eknc_content_object_model_get_instance_private (self);\n+\n+  g_free (priv->ekn_id);\n+  g_free (priv->title);\n+  g_free (priv->original_title);\n+  g_free (priv->original_uri);\n+  g_free (priv->thumbnail_uri);\n+  g_free (priv->language);\n+  g_free (priv->copyright_holder);\n+  g_free (priv->source_uri);\n+  g_free (priv->content_type);\n+  g_free (priv->synopsis);\n+  g_free (priv->last_modified_date);\n+  g_free (priv->license);\n+  g_clear_pointer (&priv->tags, g_variant_unref);\n+  g_clear_pointer (&priv->resources, g_variant_unref);\n+}\n+\n+static void\n+eknc_content_object_model_class_init (EkncContentObjectModelClass *klass)\n+{\n+  GObjectClass *object_class = G_OBJECT_CLASS (klass);\n+\n+  object_class->get_property = eknc_content_object_model_get_property;\n+  object_class->set_property = eknc_content_object_model_set_property;\n+  object_class->constructed = eknc_content_object_model_constructed;\n+  object_class->finalize = eknc_content_object_model_finalize;\n+\n+  /**\n+   * EkncContentObjectModel:ekn-id:\n+   *\n+   * Unique ID of the model\n+   *\n+   * This is an internal ID assigned by EKN.\n+   * If none is provided, the model will generate its own id.\n+   */\n+  eknc_content_object_model_props[PROP_EKN_ID] =\n+    g_param_spec_string (\"ekn-id\", \"Object's ID\",\n+      \"The ID of a document or media object\",\n+      \"\", G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS);\n+  /**\n+   * EkncContentObjectModel:title:\n+   *\n+   * A string with the title of the content object. Defaults to an empty string.\n+   */\n+  eknc_content_object_model_props[PROP_TITLE] =\n+    g_param_spec_string (\"title\", \"Title\",\n+      \"The title of a document or media object\",\n+      \"\", G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS);\n+  /**\n+   * EkncContentObjectModel:original-title:\n+   *\n+   * A string with the original title of the content object. Defaults to an\n+   * empty string.\n+   */\n+  eknc_content_object_model_props[PROP_ORIGINAL_TITLE] =\n+    g_param_spec_string (\"original-title\", \"Original Title\",\n+      \"The original title (wikipedia title) of a document or media object\",\n+      \"\", G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS);\n+  /**\n+   * EkncContentObjectModel:original-uri:\n+   *\n+   * URI where the original version of this content can be downloaded\n+   *\n+   * This property is distinct from source-uri, which represents the URI\n+   * where the article was downloaded from during database build.\n+   *\n+   * However, on an #ArticleObjectModel with source equal to\n+   * \"wikipedia\", \"wikihow\", \"wikisource\", or \"wikibooks\", it will be\n+   * set to the value of source-uri if it is not present in the\n+   * database, for backwards compatibility reasons.\n+   */\n+  eknc_content_object_model_props[PROP_ORIGINAL_URI] =\n+    g_param_spec_string (\"original-uri\", \"Original URI\",\n+      \"URI where the original version of this content can be downloaded\",\n+      \"\", G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS);\n+  /**\n+   * EkncContentObjectModel:thumbnail-uri:\n+   *\n+   * URI of the the thumbnail image\n+   *\n+   * Usually the EKN ID of an #ImageObjectModel.\n+   */\n+  eknc_content_object_model_props[PROP_THUMBNAIL_URI] =\n+    g_param_spec_string (\"thumbnail-uri\", \"Thumbnail URI\",\n+       \"URI of the thumbnail image\",\n+      \"\", G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS);\n+  /**\n+   * EkncContentObjectModel:language:\n+   *\n+   * The language for this content object. Defaults to an empty string.\n+   */\n+  eknc_content_object_model_props[PROP_LANGUAGE] =\n+    g_param_spec_string (\"language\", \"Language\",\n+      \"Language of the document or media object\",\n+      \"\", G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS);\n+  /**\n+   * EkncContentObjectModel:copyright-holder:\n+   *\n+   * The copyright holder for this content object. Defaults to an empty string.\n+   */\n+  eknc_content_object_model_props[PROP_COPYRIGHT_HOLDER] =\n+    g_param_spec_string (\"copyright-holder\", \"Copyright Holder\",\n+      \"The copyright holder of the object\",\n+      \"\", G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS);\n+  /**\n+   * EkncContentObjectModel:source-uri:\n+   *\n+   * URI where this content was downloaded from during database build\n+   *\n+   * TODO Should we check to always have a value for source-uri?\n+   * Don\"t use this property for user-visible things.\n+   * It is only used internally.\n+   */\n+  eknc_content_object_model_props[PROP_SOURCE_URI] =\n+    g_param_spec_string (\"source-uri\", \"Source URL\",\n+      \"URI where this content was downloaded from during database build\",\n+      \"\", G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS);\n+  /**\n+   * EkncContentObjectModel:content-type:\n+   *\n+   * The source content\"s mimetype\n+   */\n+  eknc_content_object_model_props[PROP_CONTENT_TYPE] =\n+    g_param_spec_string (\"content-type\", \"Object Content Type\",\n+      \"Mimetype of the source content\",\n+      \"\", G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS);\n+  /**\n+   * EkncContentObjectModel:synopsis:\n+   *\n+   * The synopsis for this content object. Defaults to an empty string.\n+   */\n+  eknc_content_object_model_props[PROP_SYNOPSIS] =\n+    g_param_spec_string (\"synopsis\", \"Synopsis\",\n+      \"Synopsis of the document or media object\",\n+      \"\", G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS);\n+  /**\n+   * EkncContentObjectModel:last-modified-date:\n+   *\n+   * The date of last modification for this content object. It treats dates\n+   * according to the ISO8601 standard.\n+   */\n+  eknc_content_object_model_props[PROP_LAST_MODIFIED_DATE] =\n+    g_param_spec_string (\"last-modified-date\", \"Last Modified Date\",\n+      \"Last Modified Date of the document or media object\",\n+      \"\", G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS);","path":"ekncontent/ekncontent/eknc-content-object-model.c","position":396,"original_position":397,"commit_id":"d000f8257b7a3a41f920b935a041cccd1608eff7","original_commit_id":"d405e8acf6a7ee453bbf4f4ee23ddd2caf1f74b3","user":{"login":"mattdangerw","id":1389937,"avatar_url":"https://avatars.githubusercontent.com/u/1389937?v=3","gravatar_id":"","url":"https://api.github.com/users/mattdangerw","html_url":"https://github.com/mattdangerw","followers_url":"https://api.github.com/users/mattdangerw/followers","following_url":"https://api.github.com/users/mattdangerw/following{/other_user}","gists_url":"https://api.github.com/users/mattdangerw/gists{/gist_id}","starred_url":"https://api.github.com/users/mattdangerw/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mattdangerw/subscriptions","organizations_url":"https://api.github.com/users/mattdangerw/orgs","repos_url":"https://api.github.com/users/mattdangerw/repos","events_url":"https://api.github.com/users/mattdangerw/events{/privacy}","received_events_url":"https://api.github.com/users/mattdangerw/received_events","type":"User","site_admin":false},"body":"Didn't find any boxed type or good example of date properties. I'd vote lets stick with the status quo for now, but totally fine with that as a future cleanup.","created_at":"2016-12-09T01:04:56Z","updated_at":"2016-12-09T01:04:57Z","html_url":"https://github.com/endlessm/eos-knowledge-lib/pull/1274#discussion_r91641878","pull_request_url":"https://api.github.com/repos/endlessm/eos-knowledge-lib/pulls/1274","_links":{"self":{"href":"https://api.github.com/repos/endlessm/eos-knowledge-lib/pulls/comments/91641878"},"html":{"href":"https://github.com/endlessm/eos-knowledge-lib/pull/1274#discussion_r91641878"},"pull_request":{"href":"https://api.github.com/repos/endlessm/eos-knowledge-lib/pulls/1274"}}},"pull_request":{"url":"https://api.github.com/repos/endlessm/eos-knowledge-lib/pulls/1274","id":96507014,"html_url":"https://github.com/endlessm/eos-knowledge-lib/pull/1274","diff_url":"https://github.com/endlessm/eos-knowledge-lib/pull/1274.diff","patch_url":"https://github.com/endlessm/eos-knowledge-lib/pull/1274.patch","issue_url":"https://api.github.com/repos/endlessm/eos-knowledge-lib/issues/1274","number":1274,"state":"open","locked":false,"title":"T13418","user":{"login":"mattdangerw","id":1389937,"avatar_url":"https://avatars.githubusercontent.com/u/1389937?v=3","gravatar_id":"","url":"https://api.github.com/users/mattdangerw","html_url":"https://github.com/mattdangerw","followers_url":"https://api.github.com/users/mattdangerw/followers","following_url":"https://api.github.com/users/mattdangerw/following{/other_user}","gists_url":"https://api.github.com/users/mattdangerw/gists{/gist_id}","starred_url":"https://api.github.com/users/mattdangerw/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mattdangerw/subscriptions","organizations_url":"https://api.github.com/users/mattdangerw/orgs","repos_url":"https://api.github.com/users/mattdangerw/repos","events_url":"https://api.github.com/users/mattdangerw/events{/privacy}","received_events_url":"https://api.github.com/users/mattdangerw/received_events","type":"User","site_admin":false},"body":"https://phabricator.endlessm.com/T13418","created_at":"2016-12-05T10:53:49Z","updated_at":"2016-12-09T01:04:57Z","closed_at":null,"merged_at":null,"merge_commit_sha":"567d104ba1f88d190148778fa9ffd5b8cc3605f1","assignee":null,"assignees":[],"milestone":null,"commits_url":"https://api.github.com/repos/endlessm/eos-knowledge-lib/pulls/1274/commits","review_comments_url":"https://api.github.com/repos/endlessm/eos-knowledge-lib/pulls/1274/comments","review_comment_url":"https://api.github.com/repos/endlessm/eos-knowledge-lib/pulls/comments{/number}","comments_url":"https://api.github.com/repos/endlessm/eos-knowledge-lib/issues/1274/comments","statuses_url":"https://api.github.com/repos/endlessm/eos-knowledge-lib/statuses/d000f8257b7a3a41f920b935a041cccd1608eff7","head":{"label":"endlessm:T13418","ref":"T13418","sha":"d000f8257b7a3a41f920b935a041cccd1608eff7","user":{"login":"endlessm","id":1930958,"avatar_url":"https://avatars.githubusercontent.com/u/1930958?v=3","gravatar_id":"","url":"https://api.github.com/users/endlessm","html_url":"https://github.com/endlessm","followers_url":"https://api.github.com/users/endlessm/followers","following_url":"https://api.github.com/users/endlessm/following{/other_user}","gists_url":"https://api.github.com/users/endlessm/gists{/gist_id}","starred_url":"https://api.github.com/users/endlessm/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/endlessm/subscriptions","organizations_url":"https://api.github.com/users/endlessm/orgs","repos_url":"https://api.github.com/users/endlessm/repos","events_url":"https://api.github.com/users/endlessm/events{/privacy}","received_events_url":"https://api.github.com/users/endlessm/received_events","type":"Organization","site_admin":false},"repo":{"id":18152801,"name":"eos-knowledge-lib","full_name":"endlessm/eos-knowledge-lib","owner":{"login":"endlessm","id":1930958,"avatar_url":"https://avatars.githubusercontent.com/u/1930958?v=3","gravatar_id":"","url":"https://api.github.com/users/endlessm","html_url":"https://github.com/endlessm","followers_url":"https://api.github.com/users/endlessm/followers","following_url":"https://api.github.com/users/endlessm/following{/other_user}","gists_url":"https://api.github.com/users/endlessm/gists{/gist_id}","starred_url":"https://api.github.com/users/endlessm/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/endlessm/subscriptions","organizations_url":"https://api.github.com/users/endlessm/orgs","repos_url":"https://api.github.com/users/endlessm/repos","events_url":"https://api.github.com/users/endlessm/events{/privacy}","received_events_url":"https://api.github.com/users/endlessm/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/endlessm/eos-knowledge-lib","description":"GUI library for knowledge apps","fork":false,"url":"https://api.github.com/repos/endlessm/eos-knowledge-lib","forks_url":"https://api.github.com/repos/endlessm/eos-knowledge-lib/forks","keys_url":"https://api.github.com/repos/endlessm/eos-knowledge-lib/keys{/key_id}","collaborators_url":"https://api.github.com/repos/endlessm/eos-knowledge-lib/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/endlessm/eos-knowledge-lib/teams","hooks_url":"https://api.github.com/repos/endlessm/eos-knowledge-lib/hooks","issue_events_url":"https://api.github.com/repos/endlessm/eos-knowledge-lib/issues/events{/number}","events_url":"https://api.github.com/repos/endlessm/eos-knowledge-lib/events","assignees_url":"https://api.github.com/repos/endlessm/eos-knowledge-lib/assignees{/user}","branches_url":"https://api.github.com/repos/endlessm/eos-knowledge-lib/branches{/branch}","tags_url":"https://api.github.com/repos/endlessm/eos-knowledge-lib/tags","blobs_url":"https://api.github.com/repos/endlessm/eos-knowledge-lib/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/endlessm/eos-knowledge-lib/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/endlessm/eos-knowledge-lib/git/refs{/sha}","trees_url":"https://api.github.com/repos/endlessm/eos-knowledge-lib/git/trees{/sha}","statuses_url":"https://api.github.com/repos/endlessm/eos-knowledge-lib/statuses/{sha}","languages_url":"https://api.github.com/repos/endlessm/eos-knowledge-lib/languages","stargazers_url":"https://api.github.com/repos/endlessm/eos-knowledge-lib/stargazers","contributors_url":"https://api.github.com/repos/endlessm/eos-knowledge-lib/contributors","subscribers_url":"https://api.github.com/repos/endlessm/eos-knowledge-lib/subscribers","subscription_url":"https://api.github.com/repos/endlessm/eos-knowledge-lib/subscription","commits_url":"https://api.github.com/repos/endlessm/eos-knowledge-lib/commits{/sha}","git_commits_url":"https://api.github.com/repos/endlessm/eos-knowledge-lib/git/commits{/sha}","comments_url":"https://api.github.com/repos/endlessm/eos-knowledge-lib/comments{/number}","issue_comment_url":"https://api.github.com/repos/endlessm/eos-knowledge-lib/issues/comments{/number}","contents_url":"https://api.github.com/repos/endlessm/eos-knowledge-lib/contents/{+path}","compare_url":"https://api.github.com/repos/endlessm/eos-knowledge-lib/compare/{base}...{head}","merges_url":"https://api.github.com/repos/endlessm/eos-knowledge-lib/merges","archive_url":"https://api.github.com/repos/endlessm/eos-knowledge-lib/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/endlessm/eos-knowledge-lib/downloads","issues_url":"https://api.github.com/repos/endlessm/eos-knowledge-lib/issues{/number}","pulls_url":"https://api.github.com/repos/endlessm/eos-knowledge-lib/pulls{/number}","milestones_url":"https://api.github.com/repos/endlessm/eos-knowledge-lib/milestones{/number}","notifications_url":"https://api.github.com/repos/endlessm/eos-knowledge-lib/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/endlessm/eos-knowledge-lib/labels{/name}","releases_url":"https://api.github.com/repos/endlessm/eos-knowledge-lib/releases{/id}","deployments_url":"https://api.github.com/repos/endlessm/eos-knowledge-lib/deployments","created_at":"2014-03-26T20:28:39Z","updated_at":"2016-10-24T19:50:30Z","pushed_at":"2016-12-09T00:08:56Z","git_url":"git://github.com/endlessm/eos-knowledge-lib.git","ssh_url":"git@github.com:endlessm/eos-knowledge-lib.git","clone_url":"https://github.com/endlessm/eos-knowledge-lib.git","svn_url":"https://github.com/endlessm/eos-knowledge-lib","homepage":null,"size":25187,"stargazers_count":2,"watchers_count":2,"language":"JavaScript","has_issues":false,"has_downloads":true,"has_wiki":false,"has_pages":true,"forks_count":0,"mirror_url":null,"open_issues_count":17,"forks":0,"open_issues":17,"watchers":2,"default_branch":"master"}},"base":{"label":"endlessm:master","ref":"master","sha":"3a296bb1ed11803eea50f4fd734848071e866924","user":{"login":"endlessm","id":1930958,"avatar_url":"https://avatars.githubusercontent.com/u/1930958?v=3","gravatar_id":"","url":"https://api.github.com/users/endlessm","html_url":"https://github.com/endlessm","followers_url":"https://api.github.com/users/endlessm/followers","following_url":"https://api.github.com/users/endlessm/following{/other_user}","gists_url":"https://api.github.com/users/endlessm/gists{/gist_id}","starred_url":"https://api.github.com/users/endlessm/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/endlessm/subscriptions","organizations_url":"https://api.github.com/users/endlessm/orgs","repos_url":"https://api.github.com/users/endlessm/repos","events_url":"https://api.github.com/users/endlessm/events{/privacy}","received_events_url":"https://api.github.com/users/endlessm/received_events","type":"Organization","site_admin":false},"repo":{"id":18152801,"name":"eos-knowledge-lib","full_name":"endlessm/eos-knowledge-lib","owner":{"login":"endlessm","id":1930958,"avatar_url":"https://avatars.githubusercontent.com/u/1930958?v=3","gravatar_id":"","url":"https://api.github.com/users/endlessm","html_url":"https://github.com/endlessm","followers_url":"https://api.github.com/users/endlessm/followers","following_url":"https://api.github.com/users/endlessm/following{/other_user}","gists_url":"https://api.github.com/users/endlessm/gists{/gist_id}","starred_url":"https://api.github.com/users/endlessm/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/endlessm/subscriptions","organizations_url":"https://api.github.com/users/endlessm/orgs","repos_url":"https://api.github.com/users/endlessm/repos","events_url":"https://api.github.com/users/endlessm/events{/privacy}","received_events_url":"https://api.github.com/users/endlessm/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/endlessm/eos-knowledge-lib","description":"GUI library for knowledge apps","fork":false,"url":"https://api.github.com/repos/endlessm/eos-knowledge-lib","forks_url":"https://api.github.com/repos/endlessm/eos-knowledge-lib/forks","keys_url":"https://api.github.com/repos/endlessm/eos-knowledge-lib/keys{/key_id}","collaborators_url":"https://api.github.com/repos/endlessm/eos-knowledge-lib/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/endlessm/eos-knowledge-lib/teams","hooks_url":"https://api.github.com/repos/endlessm/eos-knowledge-lib/hooks","issue_events_url":"https://api.github.com/repos/endlessm/eos-knowledge-lib/issues/events{/number}","events_url":"https://api.github.com/repos/endlessm/eos-knowledge-lib/events","assignees_url":"https://api.github.com/repos/endlessm/eos-knowledge-lib/assignees{/user}","branches_url":"https://api.github.com/repos/endlessm/eos-knowledge-lib/branches{/branch}","tags_url":"https://api.github.com/repos/endlessm/eos-knowledge-lib/tags","blobs_url":"https://api.github.com/repos/endlessm/eos-knowledge-lib/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/endlessm/eos-knowledge-lib/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/endlessm/eos-knowledge-lib/git/refs{/sha}","trees_url":"https://api.github.com/repos/endlessm/eos-knowledge-lib/git/trees{/sha}","statuses_url":"https://api.github.com/repos/endlessm/eos-knowledge-lib/statuses/{sha}","languages_url":"https://api.github.com/repos/endlessm/eos-knowledge-lib/languages","stargazers_url":"https://api.github.com/repos/endlessm/eos-knowledge-lib/stargazers","contributors_url":"https://api.github.com/repos/endlessm/eos-knowledge-lib/contributors","subscribers_url":"https://api.github.com/repos/endlessm/eos-knowledge-lib/subscribers","subscription_url":"https://api.github.com/repos/endlessm/eos-knowledge-lib/subscription","commits_url":"https://api.github.com/repos/endlessm/eos-knowledge-lib/commits{/sha}","git_commits_url":"https://api.github.com/repos/endlessm/eos-knowledge-lib/git/commits{/sha}","comments_url":"https://api.github.com/repos/endlessm/eos-knowledge-lib/comments{/number}","issue_comment_url":"https://api.github.com/repos/endlessm/eos-knowledge-lib/issues/comments{/number}","contents_url":"https://api.github.com/repos/endlessm/eos-knowledge-lib/contents/{+path}","compare_url":"https://api.github.com/repos/endlessm/eos-knowledge-lib/compare/{base}...{head}","merges_url":"https://api.github.com/repos/endlessm/eos-knowledge-lib/merges","archive_url":"https://api.github.com/repos/endlessm/eos-knowledge-lib/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/endlessm/eos-knowledge-lib/downloads","issues_url":"https://api.github.com/repos/endlessm/eos-knowledge-lib/issues{/number}","pulls_url":"https://api.github.com/repos/endlessm/eos-knowledge-lib/pulls{/number}","milestones_url":"https://api.github.com/repos/endlessm/eos-knowledge-lib/milestones{/number}","notifications_url":"https://api.github.com/repos/endlessm/eos-knowledge-lib/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/endlessm/eos-knowledge-lib/labels{/name}","releases_url":"https://api.github.com/repos/endlessm/eos-knowledge-lib/releases{/id}","deployments_url":"https://api.github.com/repos/endlessm/eos-knowledge-lib/deployments","created_at":"2014-03-26T20:28:39Z","updated_at":"2016-10-24T19:50:30Z","pushed_at":"2016-12-09T00:08:56Z","git_url":"git://github.com/endlessm/eos-knowledge-lib.git","ssh_url":"git@github.com:endlessm/eos-knowledge-lib.git","clone_url":"https://github.com/endlessm/eos-knowledge-lib.git","svn_url":"https://github.com/endlessm/eos-knowledge-lib","homepage":null,"size":25187,"stargazers_count":2,"watchers_count":2,"language":"JavaScript","has_issues":false,"has_downloads":true,"has_wiki":false,"has_pages":true,"forks_count":0,"mirror_url":null,"open_issues_count":17,"forks":0,"open_issues":17,"watchers":2,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/endlessm/eos-knowledge-lib/pulls/1274"},"html":{"href":"https://github.com/endlessm/eos-knowledge-lib/pull/1274"},"issue":{"href":"https://api.github.com/repos/endlessm/eos-knowledge-lib/issues/1274"},"comments":{"href":"https://api.github.com/repos/endlessm/eos-knowledge-lib/issues/1274/comments"},"review_comments":{"href":"https://api.github.com/repos/endlessm/eos-knowledge-lib/pulls/1274/comments"},"review_comment":{"href":"https://api.github.com/repos/endlessm/eos-knowledge-lib/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/endlessm/eos-knowledge-lib/pulls/1274/commits"},"statuses":{"href":"https://api.github.com/repos/endlessm/eos-knowledge-lib/statuses/d000f8257b7a3a41f920b935a041cccd1608eff7"}}}}
{"actor":{"display_login":"mattdangerw"}}