{"action":"created","issue":{"url":"https://api.github.com/repos/Quartz/Chartbuilder/issues/211","repository_url":"https://api.github.com/repos/Quartz/Chartbuilder","labels_url":"https://api.github.com/repos/Quartz/Chartbuilder/issues/211/labels{/name}","comments_url":"https://api.github.com/repos/Quartz/Chartbuilder/issues/211/comments","events_url":"https://api.github.com/repos/Quartz/Chartbuilder/issues/211/events","html_url":"https://github.com/Quartz/Chartbuilder/issues/211","id":133302583,"number":211,"title":"Architectural changes to make more deployable, configureable, and upgradeable.","user":{"login":"zzolo","id":190733,"avatar_url":"https://avatars.githubusercontent.com/u/190733?v=3","gravatar_id":"","url":"https://api.github.com/users/zzolo","html_url":"https://github.com/zzolo","followers_url":"https://api.github.com/users/zzolo/followers","following_url":"https://api.github.com/users/zzolo/following{/other_user}","gists_url":"https://api.github.com/users/zzolo/gists{/gist_id}","starred_url":"https://api.github.com/users/zzolo/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/zzolo/subscriptions","organizations_url":"https://api.github.com/users/zzolo/orgs","repos_url":"https://api.github.com/users/zzolo/repos","events_url":"https://api.github.com/users/zzolo/events{/privacy}","received_events_url":"https://api.github.com/users/zzolo/received_events","type":"User","site_admin":false},"labels":[],"state":"open","locked":false,"assignee":null,"milestone":null,"comments":3,"created_at":"2016-02-12T17:47:55Z","updated_at":"2016-04-11T03:40:06Z","closed_at":null,"body":"I am a big fan of Chartbuilder.  And please excuse any things I may have overlooked in researching how Chartbuilder works and how it should be used by other organizations.  I may come off negative here, but I am mostly just trying to discuss a possibility here.\r\n\r\nChartbuilder seems like it is meant to be used by other organizations.  Specifically I would think that the goal is to have organization install Chartbuilder, customize/configure for their needs, and then deploy somewhere. I personally don't think it's built in a way to do this effectively, and I am reluctant to use Chartbuilder in our organization since there is no real upgrade path or easy way to manage customizations/configuration.\r\n\r\nThis seems to be the current upgrade path for Chartbuilder, and this is not a very good/stable/usual way to upgrade.\r\nhttps://github.com/Quartz/Chartbuilder/blob/master/docs/git-workflow-forks.md\r\n\r\nTo solve this, Chartbuilder should be thought of as a library, i.e. an NPM or Bower module that can be installed like `npm install chartbuilder`.  This would put a bit more work on the deployment side to set up an HTML page that called something like `Chartbuilder({ el: \".cb-container\" });`.  But, given that you need to do `npm install` and other commands to get running with Chartbuilder, I don't see much difference in skill level for this.\r\n\r\nAnother step to achieve this would have Chartbuilder not need to go through a build process to be used, but instead comes as a built library.\r\n\r\nSecondly, configuration is managed through changing source files.  This again, makes it difficult to upgrade.  Configuration should happen in a way that is outside the source files, either through a JSON file or options in a function.\r\n\r\nJS configuration is also happening in multiple places.  It would be super nice to see/have this all in one place.\r\n\r\nSo, these sorts of changes would make it much easier to deploy, configure, upgrade, and ultimately invest in, at least in my opinion.\r\n\r\nI don't think this is a perfect example, but this project gives a good idea of the architectural direction that I think would make Chartbuilder much easier to use from an organizational standpoint.\r\nhttps://github.com/datanews/tik-tok\r\n"},"comment":{"url":"https://api.github.com/repos/Quartz/Chartbuilder/issues/comments/208148173","html_url":"https://github.com/Quartz/Chartbuilder/issues/211#issuecomment-208148173","issue_url":"https://api.github.com/repos/Quartz/Chartbuilder/issues/211","id":208148173,"user":{"login":"nsonnad","id":1362219,"avatar_url":"https://avatars.githubusercontent.com/u/1362219?v=3","gravatar_id":"","url":"https://api.github.com/users/nsonnad","html_url":"https://github.com/nsonnad","followers_url":"https://api.github.com/users/nsonnad/followers","following_url":"https://api.github.com/users/nsonnad/following{/other_user}","gists_url":"https://api.github.com/users/nsonnad/gists{/gist_id}","starred_url":"https://api.github.com/users/nsonnad/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/nsonnad/subscriptions","organizations_url":"https://api.github.com/users/nsonnad/orgs","repos_url":"https://api.github.com/users/nsonnad/repos","events_url":"https://api.github.com/users/nsonnad/events{/privacy}","received_events_url":"https://api.github.com/users/nsonnad/received_events","type":"User","site_admin":false},"created_at":"2016-04-11T03:40:06Z","updated_at":"2016-04-11T03:40:06Z","body":"Hey @zzolo, thanks for the feedback.\r\n\r\nWe are actively working toward doing this, and it's the right way to go. It's not totally clear what the exact API is going to be, but the end result is basically as you say, to distribute chartbuilder as a pre-compiled library and instantiate a new chartbuilder with whatever settings. Of course, for serious customization, one will have to edit the source files.\r\n\r\nAs a potential user of the chartbuilder library, may I ask what you would be looking to configure? Is there much beyond just basically theming the chart? Would you, for example, want to be able to add additional settings or have really granular control of the data parsing?\r\n\r\nI am currently working on completely separating out the chart rendering code into its own library, which I think is a necessary first step in this direction. With that out of the way I think we can aim to have an API where a new chartbuilder is instantiated with default UI elements tied to a chart type, which change the chart model, but with the user able to either use defaults or customize how that data gets rendered."}}