{"action":"opened","issue":{"url":"https://api.github.com/repos/cubing/twisty.js/issues/73","labels_url":"https://api.github.com/repos/cubing/twisty.js/issues/73/labels{/name}","comments_url":"https://api.github.com/repos/cubing/twisty.js/issues/73/comments","events_url":"https://api.github.com/repos/cubing/twisty.js/issues/73/events","html_url":"https://github.com/cubing/twisty.js/issues/73","id":98311514,"number":73,"title":"v2 APIs","user":{"login":"lgarron","id":248078,"avatar_url":"https://avatars.githubusercontent.com/u/248078?v=3","gravatar_id":"","url":"https://api.github.com/users/lgarron","html_url":"https://github.com/lgarron","followers_url":"https://api.github.com/users/lgarron/followers","following_url":"https://api.github.com/users/lgarron/following{/other_user}","gists_url":"https://api.github.com/users/lgarron/gists{/gist_id}","starred_url":"https://api.github.com/users/lgarron/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/lgarron/subscriptions","organizations_url":"https://api.github.com/users/lgarron/orgs","repos_url":"https://api.github.com/users/lgarron/repos","events_url":"https://api.github.com/users/lgarron/events{/privacy}","received_events_url":"https://api.github.com/users/lgarron/received_events","type":"User","site_admin":false},"labels":[{"url":"https://api.github.com/repos/cubing/twisty.js/labels/difficulty-hard-or-complicated","name":"difficulty-hard-or-complicated","color":"f7c6c7"},{"url":"https://api.github.com/repos/cubing/twisty.js/labels/priority-top","name":"priority-top","color":"e11d21"}],"state":"open","locked":false,"assignee":null,"milestone":null,"comments":0,"created_at":"2015-07-31T03:52:51Z","updated_at":"2015-07-31T03:52:51Z","closed_at":null,"body":"\r\n# Classes\r\n\r\nClasses implemented using prototypes.\r\nAll setters should also have a getter.\r\n\r\n## `Twisty`\r\n\r\n    Twisty.animation.setSpeed(ratio);\r\n    Twisty.animation.playForwards();\r\n    Twisty.animation.playBackwards();\r\n    Twisty.animation.pause();\r\n    Twisty.animation.playSingleMoveForwards();\r\n    Twisty.animation.playSingleMoveBackwards();\r\n    Twisty.animation.skipToStart();\r\n    Twisty.animation.skipToEnd();\r\n    Twisty.animation.setPosition(ms, \"animateQuickly\" | \"immediate\")\r\n    Twisty.setup.setSolvedState(TwistyState)\r\n    Twisty.setAlg(TwistyAlg)\r\n\r\n### `Twisty3x3x3` (prototype: `Twisty`)\r\n\r\n## `TwistyState`\r\n\r\nA `TwistyState` is a ksolve-like extension of the idea of a permutation.\r\n\r\n    TwistyState.fromAlg()\r\n    TwistyState.invert() @returns TwistyState\r\n    TwistyState.compose(TwistyState) @returns TWistyState\r\n\r\n## `AnimatingTwistyState`\r\n\r\n    TwistyState.fromAlg()\r\n    TwistyState.invert() ?\r\n\r\n## `Alg`\r\n\r\nAn alg is a collection of moves and other algs.\r\nCan be either a straight move sequence, or a group/communtator/conjugate.\r\n\r\n    Alg.addMoves(?)\r\n    Alg.timestampToToken(ms) @returns AlgToken\r\n    Alg.tokenToTimestamp(AlgToken) @returns ms\r\n    Alg.reparse(\"<original alg> R U R'\")\r\n\r\n## `Alg3x3x3` (prototype: `Alg`)\r\n\r\n## `AlgToken`\r\n\r\n\r\n\r\n## `DOMAlg` ?\r\n\r\n    // Something for highlighting\r\n\r\n## `TwistyView`\r\n\r\n    new TwistyView(rendererType, div);\r\n      (rendererType == canvas, CSS div, etc.)\r\n      // support shadow DOM where possible?\r\n    TwistyView.addPuzzle(puzzle);\r\n    TwistyView.setCameraLocation(coords)\r\n    TwistyView.fullscreen();\r\n      // Perhaps the client can just use the normal HTML5 API on the div?\r\n    // 2-axis View rotation support support\r\n\r\n## `Convenience`\r\n\r\n    Twisty.emulateAnimCubeApplet()\r\n    Twisty.emulateRandelshoferApplet()\r\n    Twisty.emulateRoofpig\r\n\r\n\r\n## `TwistySolver`\r\n\r\n    TwistySolver.solveState(); @returns Alg\r\n\r\n# TODO\r\n\r\n- Sticker Dragging\r\n- Keyboard input"}}