{"action":"created","comment":{"url":"https://api.github.com/repos/ckeditor/ckeditor5-core/pulls/comments/55525636","id":55525636,"diff_hunk":"@@ -0,0 +1,623 @@\n+/**\n+ * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved.\n+ * For licensing, see LICENSE.md.\n+ */\n+\n+'use strict';\n+\n+import Position from './position.js';\n+import Element from './element.js';\n+import Text from './text.js';\n+import Range from './range.js';\n+import CKEditorError from '../ckeditorerror.js';\n+\n+/**\n+ * Tree model Writer class.\n+ * Writer defines a high-level API for TreeView manipulations.\n+ *\n+ * @memberOf core.treeView\n+ */\n+ export default class Writer {\n+\tconstructor() {\n+\t\t/**\n+\t\t * Priorities map. Maps node to priority.\n+\t\t * Nodes with priorities are considered as attributes.\n+\t\t *\n+\t\t * @member {WeakMap} core.treeView.Writer#_priorities\n+         * @protected\n+         */\n+\t\tthis._priorities = new WeakMap();\n+\t}\n+\n+\t/**\n+\t * Returns `true` if provided node is a `container` node.\n+\t * Node is considered as `container` when it is a {@link core.treeView.Element Element} instance and has no priority\n+\t * defined.\n+\t *\n+\t * @param {core.treeView.Element} node Node to check.\n+\t * @returns {Boolean} `True` if provided node is a container.\n+     */\n+\tisContainer( node ) {\n+\t\tconst isElement = node instanceof Element;\n+\n+\t\treturn isElement && !this._priorities.has( node );\n+\t}\n+\n+\t/**\n+\t * Returns `true` if provided node is an `attribute` node.\n+\t * Node is considered as `attribute` when it is a {@link core.treeView.Element Element} instance and has priority\n+\t * defined.\n+\t *\n+\t * @param {core.treeView.Element} node Node to check.\n+\t * @returns {Boolean} `True` if provided node is an attribute.\n+\t */\n+\tisAttribute( node ) {\n+\t\tconst isElement = node instanceof Element;\n+\n+\t\treturn isElement && this._priorities.has( node );\n+\t}\n+\n+\t/**\n+\t * Sets node priority. When priority is defined, node is considered as `attribute`\n+\t *\n+\t * @param {core.treeView.Node} node\n+\t * @param {Number} priority\n+     */\n+\tsetPriority( node, priority ) {\n+\t\tthis._priorities.set( node, priority );\n+\t}\n+\n+\t/**\n+\t * Returns node's priority.\n+\t *\n+\t * @param {core.treeView.Node} node Node to check its priority.\n+\t * @returns {Number|undefined} Priority or `undefined` if there is no priority defined.\n+     */\n+\tgetPriority( node ) {\n+\t\treturn this._priorities.get( node );\n+\t}\n+\n+\t/**\n+\t * Returns first parent container of specified {@link core.treeView.Position Position}.\n+\t * Position's parent node is checked as first, then next parents are checked.\n+\t *\n+\t * @param {core.treeView.Position} position Position used as a start point to locate parent container.\n+\t * @returns {core.treeView.Element|null} Parent container element or `null` if container is not found.\n+\t */\n+\tgetParentContainer( position ) {\n+\t\tlet parent = position.parent;\n+\n+\t\twhile ( !this.isContainer( parent ) ) {\n+\t\t\tif ( !parent ) {\n+\t\t\t\treturn null;\n+\t\t\t}\n+\t\t\tparent = parent.parent;\n+\t\t}\n+\n+\t\treturn parent;\n+\t}\n+\n+\t/**\n+\t * Breaks attribute nodes at provided position. It breaks `attribute` nodes inside `container` node.\n+\t *\n+\t *\t\t<p>{foo}<b><u>{bar}|</u></b></p> -> <p>{foo}<b><u>{bar}</u></b>|</p>\n+\t *\t\t<p>{foo}<b><u>|{bar}</u></b></p> -> <p>{foo}|<b><u>{bar}</u></b></p>\n+\t *\t\t<p>{foo}<b><u>{b|ar}</u></b></p> -> <p>{foo}<b><u>{b}</u></b>|<b><u>{ar}</u></b></p>\n+\t *\n+\t * @see {@link core.treeView.Writer#isContainer}\n+\t * @see {@link core.treeView.Writer#isAttribute}\n+\t *\n+\t * @param {core.treeView.Position} position Position where to break attributes.\n+\t * @returns {core.treeView.Position} New position after breaking the attributes.\n+\t */\n+\tbreakAttributes( position ) {\n+\t\tconst positionOffset = position.offset;\n+\t\tconst positionParent = position.parent;\n+\n+\t\t// Position's parent is container, so no attributes to break.\n+\t\tif ( this.isContainer( positionParent ) ) {\n+\t\t\treturn Position.createFromPosition( position );\n+\t\t}\n+\n+\t\tconst parentIsText = positionParent instanceof Text;\n+\t\tconst length = parentIsText ? positionParent.data.length : positionParent.getChildCount();\n+\n+\t\t// <p>foo<b><u>bar|</u></b></p>\n+\t\t// <p>foo<b><u>bar</u>|</b></p>\n+\t\t// <p>foo<b><u>bar</u></b>|</p>\n+\t\tif ( positionOffset == length ) {\n+\t\t\tconst newPosition = new Position( positionParent.parent, positionParent.getIndex() + 1 );\n+\n+\t\t\treturn this.breakAttributes( newPosition );\n+\t\t} else\n+\t\t// <p>foo<b><u>|bar</u></b></p>\n+\t\t// <p>foo<b>|<u>bar</u></b></p>\n+\t\t// <p>foo|<b><u>bar</u></b></p>\n+\t\tif ( positionOffset === 0 ) {\n+\t\t\tconst newPosition = new Position( positionParent.parent, positionParent.getIndex() );\n+\n+\t\t\treturn this.breakAttributes( newPosition );\n+\t\t}\n+\t\t// <p>foo<b><u>\"b|ar\"</u></b></p>\n+\t\t// <p>foo<b><u>\"b\"|\"ar\"</u></b></p>\n+\t\t// <p>foo<b><u>b</u>|<u>ar</u></b></p>\n+\t\t// <p>foo<b><u>b</u></b>|<b><u>ar</u></b></p>\n+\t\telse {\n+\t\t\tconst offsetAfter = positionParent.getIndex() + 1;\n+\n+\t\t\tif ( parentIsText ) {\n+\t\t\t\t// Break text.\n+\t\t\t\t// Get part of the text that need to be moved.\n+\t\t\t\tconst textToMove = positionParent.data.slice( positionOffset );\n+\n+\t\t\t\t// Leave rest of the text in position's parent.\n+\t\t\t\tpositionParent.data = positionParent.data.slice( 0, positionOffset );\n+\n+\t\t\t\t// Insert new text node after position's parent text node.\n+\t\t\t\tpositionParent.parent.insertChildren( offsetAfter, new Text( textToMove ) );\n+\n+\t\t\t\t// Create new position to work on.\n+\t\t\t\tconst newPosition = new Position( positionParent.parent, offsetAfter );\n+\n+\t\t\t\treturn this.breakAttributes( newPosition );\n+\t\t\t} else {\n+\t\t\t\t// Break element.\n+\t\t\t\tconst clonedNode = positionParent.clone();\n+\n+\t\t\t\t// Clone priority.\n+\t\t\t\tthis.setPriority( clonedNode, this.getPriority( positionParent ) );\n+\n+\t\t\t\t// Insert cloned node to position's parent node.\n+\t\t\t\tpositionParent.parent.insertChildren( offsetAfter, clonedNode );\n+\n+\t\t\t\t// Get nodes to move.\n+\t\t\t\tconst count = positionParent.getChildCount() - positionOffset;\n+\t\t\t\tconst nodesToMove = positionParent.removeChildren( positionOffset, count );\n+\n+\t\t\t\t// Move nodes to cloned node.\n+\t\t\t\tclonedNode.appendChildren( nodesToMove );\n+\n+\t\t\t\t// Create new position to work on.\n+\t\t\t\tconst newPosition = new Position( positionParent.parent, offsetAfter );\n+\n+\t\t\t\treturn this.breakAttributes( newPosition );\n+\t\t\t}\n+\t\t}\n+\t}\n+\n+\t/**\n+\t * Uses {@link core.treeView.Writer#breakAttributes breakAttribute} method to break attributes on\n+\t * {@link core.treeView.Range#start start} and {@link core.treeView.Range#end end} positions of\n+\t * provided {@link core.treeView.Range Range}.\n+\t *\n+\t * Throws {@link core.CKEditorError CKEditorError} `treeview-writer-invalid-range-container` when\n+\t * {@link core.treeView.Range#start start} and {@link core.treeView.Range#end end} positions are not placed inside","path":"src/treeview/writer.js","position":194,"original_position":194,"commit_id":"e0bbc60cb5ccb49b73a4dffbc650858431709364","original_commit_id":"e0bbc60cb5ccb49b73a4dffbc650858431709364","user":{"login":"pjasiun","id":1166967,"avatar_url":"https://avatars.githubusercontent.com/u/1166967?v=3","gravatar_id":"","url":"https://api.github.com/users/pjasiun","html_url":"https://github.com/pjasiun","followers_url":"https://api.github.com/users/pjasiun/followers","following_url":"https://api.github.com/users/pjasiun/following{/other_user}","gists_url":"https://api.github.com/users/pjasiun/gists{/gist_id}","starred_url":"https://api.github.com/users/pjasiun/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/pjasiun/subscriptions","organizations_url":"https://api.github.com/users/pjasiun/orgs","repos_url":"https://api.github.com/users/pjasiun/repos","events_url":"https://api.github.com/users/pjasiun/events{/privacy}","received_events_url":"https://api.github.com/users/pjasiun/received_events","type":"User","site_admin":false},"body":"and -> or?","created_at":"2016-03-09T14:31:37Z","updated_at":"2016-03-09T14:31:37Z","html_url":"https://github.com/ckeditor/ckeditor5-core/pull/245#discussion_r55525636","pull_request_url":"https://api.github.com/repos/ckeditor/ckeditor5-core/pulls/245","_links":{"self":{"href":"https://api.github.com/repos/ckeditor/ckeditor5-core/pulls/comments/55525636"},"html":{"href":"https://github.com/ckeditor/ckeditor5-core/pull/245#discussion_r55525636"},"pull_request":{"href":"https://api.github.com/repos/ckeditor/ckeditor5-core/pulls/245"}}},"pull_request":{"url":"https://api.github.com/repos/ckeditor/ckeditor5-core/pulls/245","id":62214202,"html_url":"https://github.com/ckeditor/ckeditor5-core/pull/245","diff_url":"https://github.com/ckeditor/ckeditor5-core/pull/245.diff","patch_url":"https://github.com/ckeditor/ckeditor5-core/pull/245.patch","issue_url":"https://api.github.com/repos/ckeditor/ckeditor5-core/issues/245","number":245,"state":"open","locked":false,"title":"TreeView writer","user":{"login":"szymonkups","id":2396463,"avatar_url":"https://avatars.githubusercontent.com/u/2396463?v=3","gravatar_id":"","url":"https://api.github.com/users/szymonkups","html_url":"https://github.com/szymonkups","followers_url":"https://api.github.com/users/szymonkups/followers","following_url":"https://api.github.com/users/szymonkups/following{/other_user}","gists_url":"https://api.github.com/users/szymonkups/gists{/gist_id}","starred_url":"https://api.github.com/users/szymonkups/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/szymonkups/subscriptions","organizations_url":"https://api.github.com/users/szymonkups/orgs","repos_url":"https://api.github.com/users/szymonkups/repos","events_url":"https://api.github.com/users/szymonkups/events{/privacy}","received_events_url":"https://api.github.com/users/szymonkups/received_events","type":"User","site_admin":false},"body":"This PR introduces TreeView Writer class mentioned in #164. ","created_at":"2016-03-09T11:22:52Z","updated_at":"2016-03-09T14:31:37Z","closed_at":null,"merged_at":null,"merge_commit_sha":"c3e7b0de58088911a508097399104f292a609fe5","assignee":null,"milestone":null,"commits_url":"https://api.github.com/repos/ckeditor/ckeditor5-core/pulls/245/commits","review_comments_url":"https://api.github.com/repos/ckeditor/ckeditor5-core/pulls/245/comments","review_comment_url":"https://api.github.com/repos/ckeditor/ckeditor5-core/pulls/comments{/number}","comments_url":"https://api.github.com/repos/ckeditor/ckeditor5-core/issues/245/comments","statuses_url":"https://api.github.com/repos/ckeditor/ckeditor5-core/statuses/e0bbc60cb5ccb49b73a4dffbc650858431709364","head":{"label":"ckeditor:t/164","ref":"t/164","sha":"e0bbc60cb5ccb49b73a4dffbc650858431709364","user":{"login":"ckeditor","id":825710,"avatar_url":"https://avatars.githubusercontent.com/u/825710?v=3","gravatar_id":"","url":"https://api.github.com/users/ckeditor","html_url":"https://github.com/ckeditor","followers_url":"https://api.github.com/users/ckeditor/followers","following_url":"https://api.github.com/users/ckeditor/following{/other_user}","gists_url":"https://api.github.com/users/ckeditor/gists{/gist_id}","starred_url":"https://api.github.com/users/ckeditor/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ckeditor/subscriptions","organizations_url":"https://api.github.com/users/ckeditor/orgs","repos_url":"https://api.github.com/users/ckeditor/repos","events_url":"https://api.github.com/users/ckeditor/events{/privacy}","received_events_url":"https://api.github.com/users/ckeditor/received_events","type":"Organization","site_admin":false},"repo":{"id":28972890,"name":"ckeditor5-core","full_name":"ckeditor/ckeditor5-core","owner":{"login":"ckeditor","id":825710,"avatar_url":"https://avatars.githubusercontent.com/u/825710?v=3","gravatar_id":"","url":"https://api.github.com/users/ckeditor","html_url":"https://github.com/ckeditor","followers_url":"https://api.github.com/users/ckeditor/followers","following_url":"https://api.github.com/users/ckeditor/following{/other_user}","gists_url":"https://api.github.com/users/ckeditor/gists{/gist_id}","starred_url":"https://api.github.com/users/ckeditor/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ckeditor/subscriptions","organizations_url":"https://api.github.com/users/ckeditor/orgs","repos_url":"https://api.github.com/users/ckeditor/repos","events_url":"https://api.github.com/users/ckeditor/events{/privacy}","received_events_url":"https://api.github.com/users/ckeditor/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/ckeditor/ckeditor5-core","description":"CKEditor 5 Core Framework.","fork":false,"url":"https://api.github.com/repos/ckeditor/ckeditor5-core","forks_url":"https://api.github.com/repos/ckeditor/ckeditor5-core/forks","keys_url":"https://api.github.com/repos/ckeditor/ckeditor5-core/keys{/key_id}","collaborators_url":"https://api.github.com/repos/ckeditor/ckeditor5-core/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/ckeditor/ckeditor5-core/teams","hooks_url":"https://api.github.com/repos/ckeditor/ckeditor5-core/hooks","issue_events_url":"https://api.github.com/repos/ckeditor/ckeditor5-core/issues/events{/number}","events_url":"https://api.github.com/repos/ckeditor/ckeditor5-core/events","assignees_url":"https://api.github.com/repos/ckeditor/ckeditor5-core/assignees{/user}","branches_url":"https://api.github.com/repos/ckeditor/ckeditor5-core/branches{/branch}","tags_url":"https://api.github.com/repos/ckeditor/ckeditor5-core/tags","blobs_url":"https://api.github.com/repos/ckeditor/ckeditor5-core/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/ckeditor/ckeditor5-core/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/ckeditor/ckeditor5-core/git/refs{/sha}","trees_url":"https://api.github.com/repos/ckeditor/ckeditor5-core/git/trees{/sha}","statuses_url":"https://api.github.com/repos/ckeditor/ckeditor5-core/statuses/{sha}","languages_url":"https://api.github.com/repos/ckeditor/ckeditor5-core/languages","stargazers_url":"https://api.github.com/repos/ckeditor/ckeditor5-core/stargazers","contributors_url":"https://api.github.com/repos/ckeditor/ckeditor5-core/contributors","subscribers_url":"https://api.github.com/repos/ckeditor/ckeditor5-core/subscribers","subscription_url":"https://api.github.com/repos/ckeditor/ckeditor5-core/subscription","commits_url":"https://api.github.com/repos/ckeditor/ckeditor5-core/commits{/sha}","git_commits_url":"https://api.github.com/repos/ckeditor/ckeditor5-core/git/commits{/sha}","comments_url":"https://api.github.com/repos/ckeditor/ckeditor5-core/comments{/number}","issue_comment_url":"https://api.github.com/repos/ckeditor/ckeditor5-core/issues/comments{/number}","contents_url":"https://api.github.com/repos/ckeditor/ckeditor5-core/contents/{+path}","compare_url":"https://api.github.com/repos/ckeditor/ckeditor5-core/compare/{base}...{head}","merges_url":"https://api.github.com/repos/ckeditor/ckeditor5-core/merges","archive_url":"https://api.github.com/repos/ckeditor/ckeditor5-core/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/ckeditor/ckeditor5-core/downloads","issues_url":"https://api.github.com/repos/ckeditor/ckeditor5-core/issues{/number}","pulls_url":"https://api.github.com/repos/ckeditor/ckeditor5-core/pulls{/number}","milestones_url":"https://api.github.com/repos/ckeditor/ckeditor5-core/milestones{/number}","notifications_url":"https://api.github.com/repos/ckeditor/ckeditor5-core/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/ckeditor/ckeditor5-core/labels{/name}","releases_url":"https://api.github.com/repos/ckeditor/ckeditor5-core/releases{/id}","deployments_url":"https://api.github.com/repos/ckeditor/ckeditor5-core/deployments","created_at":"2015-01-08T15:47:45Z","updated_at":"2016-03-01T11:53:15Z","pushed_at":"2016-03-09T14:23:34Z","git_url":"git://github.com/ckeditor/ckeditor5-core.git","ssh_url":"git@github.com:ckeditor/ckeditor5-core.git","clone_url":"https://github.com/ckeditor/ckeditor5-core.git","svn_url":"https://github.com/ckeditor/ckeditor5-core","homepage":null,"size":1983,"stargazers_count":23,"watchers_count":23,"language":"JavaScript","has_issues":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":16,"mirror_url":null,"open_issues_count":57,"forks":16,"open_issues":57,"watchers":23,"default_branch":"master"}},"base":{"label":"ckeditor:master","ref":"master","sha":"e8aec71b0ecc8edde3c241699e6df1c51ca8e27e","user":{"login":"ckeditor","id":825710,"avatar_url":"https://avatars.githubusercontent.com/u/825710?v=3","gravatar_id":"","url":"https://api.github.com/users/ckeditor","html_url":"https://github.com/ckeditor","followers_url":"https://api.github.com/users/ckeditor/followers","following_url":"https://api.github.com/users/ckeditor/following{/other_user}","gists_url":"https://api.github.com/users/ckeditor/gists{/gist_id}","starred_url":"https://api.github.com/users/ckeditor/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ckeditor/subscriptions","organizations_url":"https://api.github.com/users/ckeditor/orgs","repos_url":"https://api.github.com/users/ckeditor/repos","events_url":"https://api.github.com/users/ckeditor/events{/privacy}","received_events_url":"https://api.github.com/users/ckeditor/received_events","type":"Organization","site_admin":false},"repo":{"id":28972890,"name":"ckeditor5-core","full_name":"ckeditor/ckeditor5-core","owner":{"login":"ckeditor","id":825710,"avatar_url":"https://avatars.githubusercontent.com/u/825710?v=3","gravatar_id":"","url":"https://api.github.com/users/ckeditor","html_url":"https://github.com/ckeditor","followers_url":"https://api.github.com/users/ckeditor/followers","following_url":"https://api.github.com/users/ckeditor/following{/other_user}","gists_url":"https://api.github.com/users/ckeditor/gists{/gist_id}","starred_url":"https://api.github.com/users/ckeditor/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ckeditor/subscriptions","organizations_url":"https://api.github.com/users/ckeditor/orgs","repos_url":"https://api.github.com/users/ckeditor/repos","events_url":"https://api.github.com/users/ckeditor/events{/privacy}","received_events_url":"https://api.github.com/users/ckeditor/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/ckeditor/ckeditor5-core","description":"CKEditor 5 Core Framework.","fork":false,"url":"https://api.github.com/repos/ckeditor/ckeditor5-core","forks_url":"https://api.github.com/repos/ckeditor/ckeditor5-core/forks","keys_url":"https://api.github.com/repos/ckeditor/ckeditor5-core/keys{/key_id}","collaborators_url":"https://api.github.com/repos/ckeditor/ckeditor5-core/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/ckeditor/ckeditor5-core/teams","hooks_url":"https://api.github.com/repos/ckeditor/ckeditor5-core/hooks","issue_events_url":"https://api.github.com/repos/ckeditor/ckeditor5-core/issues/events{/number}","events_url":"https://api.github.com/repos/ckeditor/ckeditor5-core/events","assignees_url":"https://api.github.com/repos/ckeditor/ckeditor5-core/assignees{/user}","branches_url":"https://api.github.com/repos/ckeditor/ckeditor5-core/branches{/branch}","tags_url":"https://api.github.com/repos/ckeditor/ckeditor5-core/tags","blobs_url":"https://api.github.com/repos/ckeditor/ckeditor5-core/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/ckeditor/ckeditor5-core/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/ckeditor/ckeditor5-core/git/refs{/sha}","trees_url":"https://api.github.com/repos/ckeditor/ckeditor5-core/git/trees{/sha}","statuses_url":"https://api.github.com/repos/ckeditor/ckeditor5-core/statuses/{sha}","languages_url":"https://api.github.com/repos/ckeditor/ckeditor5-core/languages","stargazers_url":"https://api.github.com/repos/ckeditor/ckeditor5-core/stargazers","contributors_url":"https://api.github.com/repos/ckeditor/ckeditor5-core/contributors","subscribers_url":"https://api.github.com/repos/ckeditor/ckeditor5-core/subscribers","subscription_url":"https://api.github.com/repos/ckeditor/ckeditor5-core/subscription","commits_url":"https://api.github.com/repos/ckeditor/ckeditor5-core/commits{/sha}","git_commits_url":"https://api.github.com/repos/ckeditor/ckeditor5-core/git/commits{/sha}","comments_url":"https://api.github.com/repos/ckeditor/ckeditor5-core/comments{/number}","issue_comment_url":"https://api.github.com/repos/ckeditor/ckeditor5-core/issues/comments{/number}","contents_url":"https://api.github.com/repos/ckeditor/ckeditor5-core/contents/{+path}","compare_url":"https://api.github.com/repos/ckeditor/ckeditor5-core/compare/{base}...{head}","merges_url":"https://api.github.com/repos/ckeditor/ckeditor5-core/merges","archive_url":"https://api.github.com/repos/ckeditor/ckeditor5-core/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/ckeditor/ckeditor5-core/downloads","issues_url":"https://api.github.com/repos/ckeditor/ckeditor5-core/issues{/number}","pulls_url":"https://api.github.com/repos/ckeditor/ckeditor5-core/pulls{/number}","milestones_url":"https://api.github.com/repos/ckeditor/ckeditor5-core/milestones{/number}","notifications_url":"https://api.github.com/repos/ckeditor/ckeditor5-core/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/ckeditor/ckeditor5-core/labels{/name}","releases_url":"https://api.github.com/repos/ckeditor/ckeditor5-core/releases{/id}","deployments_url":"https://api.github.com/repos/ckeditor/ckeditor5-core/deployments","created_at":"2015-01-08T15:47:45Z","updated_at":"2016-03-01T11:53:15Z","pushed_at":"2016-03-09T14:23:34Z","git_url":"git://github.com/ckeditor/ckeditor5-core.git","ssh_url":"git@github.com:ckeditor/ckeditor5-core.git","clone_url":"https://github.com/ckeditor/ckeditor5-core.git","svn_url":"https://github.com/ckeditor/ckeditor5-core","homepage":null,"size":1983,"stargazers_count":23,"watchers_count":23,"language":"JavaScript","has_issues":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":16,"mirror_url":null,"open_issues_count":57,"forks":16,"open_issues":57,"watchers":23,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/ckeditor/ckeditor5-core/pulls/245"},"html":{"href":"https://github.com/ckeditor/ckeditor5-core/pull/245"},"issue":{"href":"https://api.github.com/repos/ckeditor/ckeditor5-core/issues/245"},"comments":{"href":"https://api.github.com/repos/ckeditor/ckeditor5-core/issues/245/comments"},"review_comments":{"href":"https://api.github.com/repos/ckeditor/ckeditor5-core/pulls/245/comments"},"review_comment":{"href":"https://api.github.com/repos/ckeditor/ckeditor5-core/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/ckeditor/ckeditor5-core/pulls/245/commits"},"statuses":{"href":"https://api.github.com/repos/ckeditor/ckeditor5-core/statuses/e0bbc60cb5ccb49b73a4dffbc650858431709364"}}}}