Last active
August 29, 2015 13:57
-
-
Save jlkeiper/9864039 to your computer and use it in GitHub Desktop.
OpenMRS module dependency visualization
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<!DOCTYPE html> | |
<meta charset="utf-8"> | |
<style> | |
.link { | |
fill: none; | |
stroke: #666; | |
stroke-width: 1px; | |
} | |
circle { | |
fill: #ccc; | |
stroke: #333; | |
stroke-width: 1.5px; | |
} | |
text { | |
font: 14px sans-serif; | |
pointer-events: none; | |
text-shadow: 0 1px 0 #fff, 1px 0 0 #fff, 0 -1px 0 #fff, -1px 0 0 #fff; | |
} | |
text.hover { | |
font-color: black; | |
} | |
marker { fill-opacity: 1; opacity: 1;} | |
marker#normal { fill: #666;} | |
marker#in { fill: darkblue;} | |
marker#out { fill: red;} | |
#chart { margin: 0.5em 3px; } | |
</style> | |
<body> | |
<script src="http://d3js.org/d3.v3.min.js"></script> | |
<script src="http://code.jquery.com/jquery-1.11.0.min.js"></script> | |
<form> | |
<input id="search" type="text" size="40" placeholder="search ..."/> <span id="echo"></span> | |
</form> | |
<div id="chart"></div> | |
<script> | |
$(document).ready(function(){ | |
$("#search").keyup(function(){ | |
foo = $("#search").val(); | |
if (foo.trim() == "") { | |
resetGraph(); | |
} else { | |
resetGraph(); | |
d3.selectAll("circle[source*='" + foo + "'], text[source*='" + foo + "']") | |
.classed("lit", true); | |
killEverythingElse(); | |
} | |
}); | |
$("#search").focus(); | |
}); | |
var links = [{"source":"reporting","label":"Reporting","target":"serialization.xstream","org":"openmrs","targetOrg":"openmrs"},{"source":"reporting","label":"Reporting","target":"htmlwidgets","org":"openmrs","targetOrg":"openmrs"},{"source":"reporting","label":"Reporting","target":"org.openmrs.calculation","org":"openmrs","targetOrg":"Not Found"},{"source":"kenyaemr","label":"KenyaEMR","target":"appframework","org":"I-TECH","targetOrg":"openmrs"},{"source":"kenyaemr","label":"KenyaEMR","target":"org.openmrs.calculation","org":"I-TECH","targetOrg":"Not Found"},{"source":"kenyaemr","label":"KenyaEMR","target":"htmlformentry","org":"I-TECH","targetOrg":"openmrs"},{"source":"kenyaemr","label":"KenyaEMR","target":"idgen","org":"I-TECH","targetOrg":"Not Found"},{"source":"kenyaemr","label":"KenyaEMR","target":"kenyacore","org":"I-TECH","targetOrg":"I-TECH"},{"source":"kenyaemr","label":"KenyaEMR","target":"kenyaui","org":"I-TECH","targetOrg":"Not Found"},{"source":"kenyaemr","label":"KenyaEMR","target":"metadatasharing","org":"I-TECH","targetOrg":"openmrs"},{"source":"kenyaemr","label":"KenyaEMR","target":"reporting","org":"I-TECH","targetOrg":"openmrs"},{"source":"metadatasharing","label":"Metadata Sharing Module","target":"metadatamapping","org":"openmrs","targetOrg":"openmrs"},{"source":"patientsummary","label":"Patient Summary Module","target":"reporting","org":"nribeka","targetOrg":"openmrs"},{"source":"patientsummary","label":"Patient Summary Module","target":"htmlwidgets","org":"nribeka","targetOrg":"openmrs"},{"source":"uilibrary","label":"UI Library Module","target":"uiframework","org":"openmrs","targetOrg":"openmrs"},{"source":"emrapi","label":"EMR API Module","target":"reporting","org":"openmrs","targetOrg":"openmrs"},{"source":"emrapi","label":"EMR API Module","target":"providermanagement","org":"openmrs","targetOrg":"openmrs"},{"source":"emrapi","label":"EMR API Module","target":"metadatasharing","org":"openmrs","targetOrg":"openmrs"},{"source":"emrapi","label":"EMR API Module","target":"org.openmrs.event","org":"openmrs","targetOrg":"Not Found"},{"source":"emrapi","label":"EMR API Module","target":"webservices.rest","org":"openmrs","targetOrg":"openmrs"},{"source":"amrsreports","label":"AMRS Reports Module","target":"reporting","org":"AMPATH","targetOrg":"openmrs"},{"source":"reportingrest","label":"Reporting REST","target":"serialization.xstream","org":"openmrs","targetOrg":"openmrs"},{"source":"reportingrest","label":"Reporting REST","target":"reporting","org":"openmrs","targetOrg":"openmrs"},{"source":"reportingrest","label":"Reporting REST","target":"webservices.rest","org":"openmrs","targetOrg":"openmrs"},{"source":"reportingui","label":"Reporting UI Module","target":"reporting","org":"openmrs","targetOrg":"openmrs"},{"source":"reportingui","label":"Reporting UI Module","target":"uiframework","org":"openmrs","targetOrg":"openmrs"},{"source":"reportingui","label":"Reporting UI Module","target":"appui","org":"openmrs","targetOrg":"openmrs"},{"source":"raxacore","label":"RaxaEMR Core","target":"webservices.rest","org":"Raxa","targetOrg":"openmrs"},{"source":"registrationcore","label":"Registration Core Module","target":"idgen","org":"openmrs","targetOrg":"Not Found"},{"source":"registrationcore","label":"Registration Core Module","target":"org.openmrs.event","org":"openmrs","targetOrg":"Not Found"},{"source":"registrationapp","label":"Registration App Module","target":"uicommons","org":"openmrs","targetOrg":"openmrs"},{"source":"registrationapp","label":"Registration App Module","target":"emrapi","org":"openmrs","targetOrg":"openmrs"},{"source":"registrationapp","label":"Registration App Module","target":"appui","org":"openmrs","targetOrg":"openmrs"},{"source":"registrationapp","label":"Registration App Module","target":"registrationcore","org":"openmrs","targetOrg":"openmrs"},{"source":"muzima","label":"Muzima Processor Module","target":"webservices.rest","org":"muzima","targetOrg":"openmrs"},{"source":"htmlformentry19ext","label":"HTML Form Entry Extensions for OpenMRS 1.9 Module","target":"htmlformentry","org":"openmrs","targetOrg":"openmrs"},{"source":"coreapps","label":"Core Apps Module","target":"appframework","org":"openmrs","targetOrg":"openmrs"},{"source":"coreapps","label":"Core Apps Module","target":"uiframework","org":"openmrs","targetOrg":"openmrs"},{"source":"coreapps","label":"Core Apps Module","target":"emrapi","org":"openmrs","targetOrg":"openmrs"},{"source":"coreapps","label":"Core Apps Module","target":"appui","org":"openmrs","targetOrg":"openmrs"},{"source":"coreapps","label":"Core Apps Module","target":"idgen","org":"openmrs","targetOrg":"Not Found"},{"source":"coreapps","label":"Core Apps Module","target":"webservices.rest","org":"openmrs","targetOrg":"openmrs"},{"source":"uicommons","label":"UI Commons Module","target":"uiframework","org":"openmrs","targetOrg":"openmrs"},{"source":"dictionarypublishing","label":"Dictionary Publishing Module","target":"metadatasharing","org":"openmrs","targetOrg":"openmrs"},{"source":"adminapp","label":"Administration App Module","target":"uiframework","org":"AMPATH","targetOrg":"openmrs"},{"source":"adminapp","label":"Administration App Module","target":"uicommons","org":"AMPATH","targetOrg":"openmrs"},{"source":"adminapp","label":"Administration App Module","target":"appui","org":"AMPATH","targetOrg":"openmrs"},{"source":"adminapp","label":"Administration App Module","target":"appframework","org":"AMPATH","targetOrg":"openmrs"},{"source":"dictionarysubscribing","label":"Dictionary Subscribing Module","target":"metadatasharing","org":"openmrs","targetOrg":"openmrs"},{"source":"emr","label":"EMR Module","target":"emrapi","org":"PIH","targetOrg":"openmrs"},{"source":"emr","label":"EMR Module","target":"paperrecord","org":"PIH","targetOrg":"PIH"},{"source":"emr","label":"EMR Module","target":"uiframework","org":"PIH","targetOrg":"openmrs"},{"source":"emr","label":"EMR Module","target":"appframework","org":"PIH","targetOrg":"openmrs"},{"source":"emr","label":"EMR Module","target":"htmlformentry","org":"PIH","targetOrg":"openmrs"},{"source":"emr","label":"EMR Module","target":"providermanagement","org":"PIH","targetOrg":"openmrs"},{"source":"emr","label":"EMR Module","target":"idgen","org":"PIH","targetOrg":"Not Found"},{"source":"emr","label":"EMR Module","target":"reporting","org":"PIH","targetOrg":"openmrs"},{"source":"emr","label":"EMR Module","target":"uicommons","org":"PIH","targetOrg":"openmrs"},{"source":"emr","label":"EMR Module","target":"metadatasharing","org":"PIH","targetOrg":"openmrs"},{"source":"kenyacore","label":"KenyaCore","target":"appframework","org":"I-TECH","targetOrg":"openmrs"},{"source":"kenyacore","label":"KenyaCore","target":"org.openmrs.calculation","org":"I-TECH","targetOrg":"Not Found"},{"source":"kenyacore","label":"KenyaCore","target":"htmlformentry","org":"I-TECH","targetOrg":"openmrs"},{"source":"kenyacore","label":"KenyaCore","target":"idgen","org":"I-TECH","targetOrg":"Not Found"},{"source":"kenyacore","label":"KenyaCore","target":"metadatadeploy","org":"I-TECH","targetOrg":"I-TECH"},{"source":"kenyacore","label":"KenyaCore","target":"reporting","org":"I-TECH","targetOrg":"openmrs"},{"source":"kenyacore","label":"KenyaCore","target":"uiframework","org":"I-TECH","targetOrg":"openmrs"},{"source":"htmlformflowsheet","label":"htmlformflowsheet","target":"htmlformentry","org":"openmrs","targetOrg":"openmrs"},{"source":"htmlformflowsheet","label":"htmlformflowsheet","target":"1.7.2","org":"openmrs","targetOrg":"Not Found"},{"source":"mirebalais","label":"Mirebalais Hospital Module","target":"mirebalaismetadata","org":"PIH","targetOrg":"PIH"},{"source":"mirebalais","label":"Mirebalais Hospital Module","target":"uiframework","org":"PIH","targetOrg":"openmrs"},{"source":"mirebalais","label":"Mirebalais Hospital Module","target":"appframework","org":"PIH","targetOrg":"openmrs"},{"source":"mirebalais","label":"Mirebalais Hospital Module","target":"metadatasharing","org":"PIH","targetOrg":"openmrs"},{"source":"mirebalais","label":"Mirebalais Hospital Module","target":"htmlformentry","org":"PIH","targetOrg":"openmrs"},{"source":"mirebalais","label":"Mirebalais Hospital Module","target":"htmlformentry19ext","org":"PIH","targetOrg":"openmrs"},{"source":"mirebalais","label":"Mirebalais Hospital Module","target":"htmlformentryui","org":"PIH","targetOrg":"openmrs"},{"source":"mirebalais","label":"Mirebalais Hospital Module","target":"org.openmrs.calculation","org":"PIH","targetOrg":"Not Found"},{"source":"mirebalais","label":"Mirebalais Hospital Module","target":"reporting","org":"PIH","targetOrg":"openmrs"},{"source":"mirebalais","label":"Mirebalais Hospital Module","target":"idgen","org":"PIH","targetOrg":"Not Found"},{"source":"mirebalais","label":"Mirebalais Hospital Module","target":"patientregistration","org":"PIH","targetOrg":"PIH"},{"source":"mirebalais","label":"Mirebalais Hospital Module","target":"namephonetics","org":"PIH","targetOrg":"openmrs"},{"source":"mirebalais","label":"Mirebalais Hospital Module","target":"pacsintegration","org":"PIH","targetOrg":"PIH"},{"source":"mirebalais","label":"Mirebalais Hospital Module","target":"providermanagement","org":"PIH","targetOrg":"openmrs"},{"source":"mirebalais","label":"Mirebalais Hospital Module","target":"importpatientfromws","org":"PIH","targetOrg":"PIH"},{"source":"mirebalais","label":"Mirebalais Hospital Module","target":"uicommons","org":"PIH","targetOrg":"openmrs"},{"source":"mirebalais","label":"Mirebalais Hospital Module","target":"radiologyapp","org":"PIH","targetOrg":"PIH"},{"source":"mirebalais","label":"Mirebalais Hospital Module","target":"coreapps","org":"PIH","targetOrg":"openmrs"},{"source":"mirebalais","label":"Mirebalais Hospital Module","target":"dispensing","org":"PIH","targetOrg":"openmrs"},{"source":"jsslab","label":"JSSLab Module","target":"webservices.rest","org":"openmrs","targetOrg":"openmrs"},{"source":"keaddonexample","label":"KenyaEMR Add-on Example Module","target":"kenyaemr","org":"I-TECH","targetOrg":"I-TECH"},{"source":"rwandareports","label":"Rwanda Reports","target":"rowperpatientreports","org":"PIH","targetOrg":"openmrs"},{"source":"rwandareports","label":"Rwanda Reports","target":"reportingobjectgroup","org":"PIH","targetOrg":"PIH"},{"source":"rwandareports","label":"Rwanda Reports","target":"heightweighttracker","org":"PIH","targetOrg":"Not Found"},{"source":"rwandareports","label":"Rwanda Reports","target":"orderextension","org":"PIH","targetOrg":"openmrs"},{"source":"pharmacy","label":"Pharmacy Module","target":"jsonforms","org":"openmrs","targetOrg":"AMPATH"},{"source":"referenceapplication","label":"Reference Application Module","target":"appframework","org":"openmrs","targetOrg":"openmrs"},{"source":"referenceapplication","label":"Reference Application Module","target":"uiframework","org":"openmrs","targetOrg":"openmrs"},{"source":"referenceapplication","label":"Reference Application Module","target":"uicommons","org":"openmrs","targetOrg":"openmrs"},{"source":"referenceapplication","label":"Reference Application Module","target":"appui","org":"openmrs","targetOrg":"openmrs"},{"source":"referenceapplication","label":"Reference Application Module","target":"htmlformentry","org":"openmrs","targetOrg":"openmrs"},{"source":"referenceapplication","label":"Reference Application Module","target":"htmlformentryui","org":"openmrs","targetOrg":"openmrs"},{"source":"metadatadeploy","label":"Metadata Deploy","target":"metadatasharing","org":"I-TECH","targetOrg":"openmrs"},{"source":"register","label":"Register","target":"htmlformentry","org":"openmrs","targetOrg":"openmrs"},{"source":"ampathsummary","label":"Ampath Patient Summary Module","target":"reporting","org":"nribeka","targetOrg":"openmrs"},{"source":"dss","label":"Dss","target":"chirdlutil","org":"openmrs","targetOrg":"openmrs"},{"source":"dss","label":"Dss","target":"chirdlutilbackports","org":"openmrs","targetOrg":"openmrs"},{"source":"pcslabinterface","label":"PcsLabInterface","target":"restmodule","org":"AMPATH","targetOrg":"openmrs"},{"source":"referencemetadata","label":"Reference Metadata Module","target":"emrapi","org":"openmrs","targetOrg":"openmrs"},{"source":"referencemetadata","label":"Reference Metadata Module","target":"idgen","org":"openmrs","targetOrg":"Not Found"},{"source":"referencemetadata","label":"Reference Metadata Module","target":"dataexchange","org":"openmrs","targetOrg":"openmrs"},{"source":"openhmis.cashier","label":"OpenHMIS Cashier Module","target":"openhmis.backboneforms","org":"OpenHMIS","targetOrg":"OpenHMIS"},{"source":"openhmis.cashier","label":"OpenHMIS Cashier Module","target":"openhmis.commons","org":"OpenHMIS","targetOrg":"Not Found"},{"source":"openhmis.cashier","label":"OpenHMIS Cashier Module","target":"openhmis.inventory","org":"OpenHMIS","targetOrg":"OpenHMIS"},{"source":"openhmis.cashier","label":"OpenHMIS Cashier Module","target":"jasperreport","org":"OpenHMIS","targetOrg":"openmrs"},{"source":"rowperpatientreports","label":"Row Per Patient Reports","target":"reporting","org":"openmrs","targetOrg":"openmrs"},{"source":"filemanager","label":"File Manager Module","target":"uiframework","org":"gitahi86","targetOrg":"openmrs"},{"source":"filemanager","label":"File Manager Module","target":"uicommons","org":"gitahi86","targetOrg":"openmrs"},{"source":"filemanager","label":"File Manager Module","target":"emrapi","org":"gitahi86","targetOrg":"openmrs"},{"source":"filemanager","label":"File Manager Module","target":"appui","org":"gitahi86","targetOrg":"openmrs"},{"source":"filemanager","label":"File Manager Module","target":"appframework","org":"gitahi86","targetOrg":"openmrs"},{"source":"amrsmobileforms","label":"AMRS Mobile Forms","target":"xforms","org":"AMPATH","targetOrg":"openmrs"},{"source":"amrsmobileforms","label":"AMRS Mobile Forms","target":"household","org":"AMPATH","targetOrg":"openmrs"},{"source":"htmlformentryui","label":"HTML Form Entry UI Framework Integration Module","target":"htmlformentry","org":"openmrs","targetOrg":"openmrs"},{"source":"htmlformentryui","label":"HTML Form Entry UI Framework Integration Module","target":"uiframework","org":"openmrs","targetOrg":"openmrs"},{"source":"htmlformentryui","label":"HTML Form Entry UI Framework Integration Module","target":"emrapi","org":"openmrs","targetOrg":"openmrs"},{"source":"htmlformentryui","label":"HTML Form Entry UI Framework Integration Module","target":"appui","org":"openmrs","targetOrg":"openmrs"},{"source":"htmlformentryui","label":"HTML Form Entry UI Framework Integration Module","target":"uicommons","org":"openmrs","targetOrg":"openmrs"},{"source":"kenyadq","label":"KenyaDQ","target":"kenyaui","org":"I-TECH","targetOrg":"Not Found"},{"source":"kenyadq","label":"KenyaDQ","target":"kenyacore","org":"I-TECH","targetOrg":"I-TECH"},{"source":"clinicalsummary","label":"Summary Module","target":"org.openmrs.logic","org":"openmrs","targetOrg":"Not Found"},{"source":"birt","label":"Eclipse BIRT Module","target":"reporting","org":"jmiranda","targetOrg":"openmrs"},{"source":"patientDashboardApp","label":"patientDashboardApp Module","target":"uiframework","org":"nutsiepully","targetOrg":"openmrs"},{"source":"monitoringapp","label":"Monitoring App Module","target":"uiframework","org":"jembi","targetOrg":"openmrs"},{"source":"monitoringapp","label":"Monitoring App Module","target":"uicommons","org":"jembi","targetOrg":"openmrs"},{"source":"monitoringapp","label":"Monitoring App Module","target":"appui","org":"jembi","targetOrg":"openmrs"},{"source":"monitoringapp","label":"Monitoring App Module","target":"appframework","org":"jembi","targetOrg":"openmrs"},{"source":"monitoringapp","label":"Monitoring App Module","target":"webservices.rest-omod","org":"jembi","targetOrg":"Not Found"},{"source":"monitoringapp","label":"Monitoring App Module","target":"webservices.rest-omod-common","org":"jembi","targetOrg":"Not Found"},{"source":"providermanagement","label":"Provider Management Module","target":"org.openmrs.logic","org":"openmrs","targetOrg":"Not Found"},{"source":"providermanagement","label":"Provider Management Module","target":"uiframework","org":"openmrs","targetOrg":"openmrs"},{"source":"providermanagement","label":"Provider Management Module","target":"uilibrary","org":"openmrs","targetOrg":"openmrs"},{"source":"conceptmanagementapps","label":"Concept Management Apps Module","target":"uiframework","org":"openmrs","targetOrg":"openmrs"},{"source":"conceptmanagementapps","label":"Concept Management Apps Module","target":"uicommons","org":"openmrs","targetOrg":"openmrs"},{"source":"conceptmanagementapps","label":"Concept Management Apps Module","target":"appui","org":"openmrs","targetOrg":"openmrs"},{"source":"patientflags","label":"Patient Flags Module","target":"org.openmrs.logic","org":"openmrs","targetOrg":"Not Found"},{"source":"referenceemr","label":"EMR Reference Application Module","target":"uiframework","org":"djazayeri","targetOrg":"openmrs"},{"source":"referenceemr","label":"EMR Reference Application Module","target":"appframework","org":"djazayeri","targetOrg":"openmrs"},{"source":"referenceemr","label":"EMR Reference Application Module","target":"webservices.rest","org":"djazayeri","targetOrg":"openmrs"},{"source":"openhmis.workorder","label":"OpenHMIS Work Order Module","target":"openhmis.backboneforms","org":"OpenHMIS","targetOrg":"OpenHMIS"},{"source":"openhmis.workorder","label":"OpenHMIS Work Order Module","target":"openhmis.commons","org":"OpenHMIS","targetOrg":"Not Found"},{"source":"atomfeed","label":"Atom Feed Module","target":"org.openmrs.event","org":"openmrs","targetOrg":"Not Found"},{"source":"social","label":"Social Module","target":"uiframework","org":"djazayeri","targetOrg":"openmrs"},{"source":"social","label":"Social Module","target":"uilibrary","org":"djazayeri","targetOrg":"openmrs"},{"source":"formdataexport","label":"Form Data Export Module","target":"reporting","org":"openmrs","targetOrg":"openmrs"},{"source":"formdataexport","label":"Form Data Export Module","target":"htmlformentry","org":"openmrs","targetOrg":"openmrs"},{"source":"jembiregistration","label":"Jembi Registration Module","target":"addresshierarchy","org":"jembi","targetOrg":"openmrs"},{"source":"foodprescription","label":"Food Prescription Module","target":"household","org":"AMPATH","targetOrg":"openmrs"},{"source":"openhmis.eventbasedbilling","label":"Event Based Billing Module","target":"org.openmrs.event","org":"icchange","targetOrg":"Not Found"},{"source":"openhmis.eventbasedbilling","label":"Event Based Billing Module","target":"openhmis.billableobjects","org":"icchange","targetOrg":"icchange"},{"source":"openhmis.billableobjects","label":"Billable Objects","target":"org.openmrs.event","org":"icchange","targetOrg":"Not Found"},{"source":"openhmis.billableobjects","label":"Billable Objects","target":"openhmis.commons","org":"icchange","targetOrg":"Not Found"},{"source":"openhmis.billableobjects","label":"Billable Objects","target":"openhmis.inventory","org":"icchange","targetOrg":"OpenHMIS"},{"source":"openhmis.billableobjects","label":"Billable Objects","target":"openhmis.cashier","org":"icchange","targetOrg":"OpenHMIS"},{"source":"addresshierarchyrwanda","label":"Address Hierarchy Rwanda","target":"htmlformentry","org":"rubailly","targetOrg":"openmrs"},{"source":"conceptsusage","label":"Concepts Usage Module","target":"htmlformentry","org":"rubailly","targetOrg":"openmrs"},{"source":"integration","label":"Integration Module","target":"reporting","org":"maurya","targetOrg":"openmrs"},{"source":"integration","label":"Integration Module","target":"serialization.xstream","org":"maurya","targetOrg":"openmrs"},{"source":"remoteformentry","label":"Remote FormEntry","target":"formentry","org":"openmrs","targetOrg":"openmrs"},{"source":"openhmis.backboneforms","label":"OpenHMIS Backbone Forms Module","target":"webservices.rest","org":"OpenHMIS","targetOrg":"openmrs"},{"source":"openhmis.backboneforms","label":"OpenHMIS Backbone Forms Module","target":"openhmis.commons","org":"OpenHMIS","targetOrg":"Not Found"},{"source":"kenyalab","label":"KenyaLab","target":"appframework","org":"I-TECH","targetOrg":"openmrs"},{"source":"kenyalab","label":"KenyaLab","target":"kenyacore","org":"I-TECH","targetOrg":"I-TECH"},{"source":"kenyalab","label":"KenyaLab","target":"kenyaui","org":"I-TECH","targetOrg":"Not Found"},{"source":"kenyalab","label":"KenyaLab","target":"uiframework","org":"I-TECH","targetOrg":"openmrs"},{"source":"muzimaregistration","label":"Muzima Registration Module","target":"muzima","org":"muzima","targetOrg":"muzima"},{"source":"diagnosiscapturerwanda","label":"DiagnosisCaptureRwanda","target":"uiframework","org":"pihdave","targetOrg":"openmrs"},{"source":"lancearmstrong","label":"Personal Cancer Tookit","target":"personalhr","org":"openmrs","targetOrg":"Not Found"},{"source":"lancearmstrong","label":"Personal Cancer Tookit","target":"htmlformentry","org":"openmrs","targetOrg":"openmrs"},{"source":"lancearmstrong","label":"Personal Cancer Tookit","target":"htmlformflowsheet","org":"openmrs","targetOrg":"openmrs"},{"source":"patientregistration","label":"Patient Registration Module","target":"reporting","org":"PIH","targetOrg":"openmrs"},{"source":"patientregistration","label":"Patient Registration Module","target":"htmlwidgets","org":"PIH","targetOrg":"openmrs"},{"source":"patientregistration","label":"Patient Registration Module","target":"idgen","org":"PIH","targetOrg":"Not Found"},{"source":"patientregistration","label":"Patient Registration Module","target":"emr","org":"PIH","targetOrg":"PIH"},{"source":"patientregistration","label":"Patient Registration Module","target":"paperrecord","org":"PIH","targetOrg":"PIH"},{"source":"patientregistration","label":"Patient Registration Module","target":"importpatientfromws","org":"PIH","targetOrg":"PIH"},{"source":"patientregistration","label":"Patient Registration Module","target":"addresshierarchy","org":"PIH","targetOrg":"openmrs"},{"source":"patientregistration","label":"Patient Registration Module","target":"namephonetics","org":"PIH","targetOrg":"openmrs"},{"source":"mirebalaismetadata","label":"Mirebalais Metadata Module","target":"addresshierarchy","org":"PIH","targetOrg":"openmrs"},{"source":"mirebalaismetadata","label":"Mirebalais Metadata Module","target":"emrapi","org":"PIH","targetOrg":"openmrs"},{"source":"mirebalaismetadata","label":"Mirebalais Metadata Module","target":"radiologyapp","org":"PIH","targetOrg":"PIH"},{"source":"mirebalaismetadata","label":"Mirebalais Metadata Module","target":"dispensing","org":"PIH","targetOrg":"openmrs"},{"source":"appointmentschedulingui","label":"Appointment Scheduling UI Module","target":"appointmentscheduling","org":"PIH","targetOrg":"openmrs"},{"source":"appointmentschedulingui","label":"Appointment Scheduling UI Module","target":"appframework","org":"PIH","targetOrg":"openmrs"},{"source":"appointmentschedulingui","label":"Appointment Scheduling UI Module","target":"uiframework","org":"PIH","targetOrg":"openmrs"},{"source":"appointmentschedulingui","label":"Appointment Scheduling UI Module","target":"coreapps","org":"PIH","targetOrg":"openmrs"},{"source":"appointmentschedulingui","label":"Appointment Scheduling UI Module","target":"uicommons","org":"PIH","targetOrg":"openmrs"},{"source":"appointmentschedulingui","label":"Appointment Scheduling UI Module","target":"webservices.rest","org":"PIH","targetOrg":"openmrs"},{"source":"bahmniapps","label":"Bahmni Apps Module","target":"org.bahmni.module.bahmnicore","org":"Bhamni","targetOrg":"Not Found"},{"source":"bahmniapps","label":"Bahmni Apps Module","target":"addresshierarchy","org":"Bhamni","targetOrg":"openmrs"},{"source":"bahmniapps","label":"Bahmni Apps Module","target":"webservices.rest","org":"Bhamni","targetOrg":"openmrs"},{"source":"bahmniapps","label":"Bahmni Apps Module","target":"idgen","org":"Bhamni","targetOrg":"Not Found"},{"source":"radiologyapp","label":"Radiology App Module","target":"uiframework","org":"PIH","targetOrg":"openmrs"},{"source":"radiologyapp","label":"Radiology App Module","target":"appframework","org":"PIH","targetOrg":"openmrs"},{"source":"radiologyapp","label":"Radiology App Module","target":"uicommons","org":"PIH","targetOrg":"openmrs"},{"source":"radiologyapp","label":"Radiology App Module","target":"emrapi","org":"PIH","targetOrg":"openmrs"},{"source":"radiologyapp","label":"Radiology App Module","target":"emr","org":"PIH","targetOrg":"PIH"},{"source":"alphanutrition","label":"AlphaNutrition Module","target":"household","org":"kwatuha","targetOrg":"openmrs"},{"source":"movehtmlformcontent","label":"Move HTML Form Content Module","target":"htmlformentry","org":"djazayeri","targetOrg":"openmrs"},{"source":"webserviceexamplepatientstub","label":"WebServiceExamplePatientStub","target":"webservices.jaxws","org":"openmrs","targetOrg":"Not Found"},{"source":"referencedemodata","label":"Reference Demo Data Module","target":"metadatasharing","org":"openmrs","targetOrg":"openmrs"},{"source":"referencedemodata","label":"Reference Demo Data Module","target":"emrapi","org":"openmrs","targetOrg":"openmrs"},{"source":"referencedemodata","label":"Reference Demo Data Module","target":"referencemetadata","org":"openmrs","targetOrg":"openmrs"},{"source":"referencedemodata","label":"Reference Demo Data Module","target":"providermanagement","org":"openmrs","targetOrg":"openmrs"},{"source":"fdm","label":"Food Distribution Module","target":"household","org":"jmwogi","targetOrg":"openmrs"},{"source":"amrsreport","label":"AMRS Report Module","target":"reporting","org":"ningosi","targetOrg":"openmrs"},{"source":"odkconnector","label":"ODK Connector Module","target":"reporting","org":"nribeka","targetOrg":"openmrs"},{"source":"haitimobileclinic","label":"Haiti Mobile Clinic","target":"reporting","org":"PIH","targetOrg":"openmrs"},{"source":"haitimobileclinic","label":"Haiti Mobile Clinic","target":"htmlwidgets","org":"PIH","targetOrg":"openmrs"},{"source":"haitimobileclinic","label":"Haiti Mobile Clinic","target":"addresshierarchy","org":"PIH","targetOrg":"openmrs"},{"source":"haitimobileclinic","label":"Haiti Mobile Clinic","target":"htmlformentry","org":"PIH","targetOrg":"openmrs"},{"source":"pihrwanda","label":"PIH Rwanda","target":"reporting","org":"PIH","targetOrg":"openmrs"},{"source":"pihrwanda","label":"PIH Rwanda","target":"orderextension","org":"PIH","targetOrg":"openmrs"},{"source":"pihrwanda","label":"PIH Rwanda","target":"rwandareports","org":"PIH","targetOrg":"PIH"},{"source":"pihrwanda","label":"PIH Rwanda","target":"htmlformflowsheet","org":"PIH","targetOrg":"openmrs"},{"source":"dataintegrityworkflow","label":"Data Integrity Workflow Module","target":"dataintegrity","org":"openmrs","targetOrg":"openmrs"},{"source":"bedmanagement","label":"Bed Management Module","target":"webservices.rest","org":"RetroBahmni","targetOrg":"openmrs"},{"source":"settingsapp","label":"Settings App Module","target":"webservices.rest","org":"rkorytkowski","targetOrg":"openmrs"},{"source":"openhmis.pharmacy","label":"OpenHMIS Pharmacy Module Module","target":"webservices.rest","org":"OpenHMIS","targetOrg":"openmrs"},{"source":"openhmis.pharmacy","label":"OpenHMIS Pharmacy Module Module","target":"openhmis.commons","org":"OpenHMIS","targetOrg":"Not Found"},{"source":"openhmis.pharmacy","label":"OpenHMIS Pharmacy Module Module","target":"openhmis.backboneforms","org":"OpenHMIS","targetOrg":"OpenHMIS"},{"source":"openhmis.pharmacy","label":"OpenHMIS Pharmacy Module Module","target":"openhmis.workorder","org":"OpenHMIS","targetOrg":"OpenHMIS"},{"source":"patientnarratives","label":"Patient Narratives","target":"htmlformentry","org":"openmrs","targetOrg":"openmrs"},{"source":"patientnarratives","label":"Patient Narratives","target":"xforms","org":"openmrs","targetOrg":"openmrs"},{"source":"muzimapreferredform","label":"Muzima Preferred Form Module","target":"reporting","org":"muzima","targetOrg":"openmrs"},{"source":"muzimapreferredform","label":"Muzima Preferred Form Module","target":"muzima","org":"muzima","targetOrg":"muzima"},{"source":"caching","label":"Caching","target":"serialization.xstream","org":"devcritter","targetOrg":"openmrs"},{"source":"reportingmds","label":"Reporting MDS Module","target":"metadatasharing","org":"openmrs","targetOrg":"openmrs"},{"source":"reportingmds","label":"Reporting MDS Module","target":"reporting","org":"openmrs","targetOrg":"openmrs"},{"source":"shr-rest","label":"SHR REST Interface Module","target":"shr-contenthandler","org":"jembi","targetOrg":"jembi"},{"source":"shr-rest","label":"SHR REST Interface Module","target":"webservices.rest","org":"jembi","targetOrg":"openmrs"},{"source":"vtoxfordnicu","label":"VT Oxford NICU Module","target":"uiframework","org":"nickwilkie","targetOrg":"openmrs"},{"source":"vtoxfordnicu","label":"VT Oxford NICU Module","target":"webservices.rest","org":"nickwilkie","targetOrg":"openmrs"},{"source":"tracnetreportingsdmx","label":"Tracnet Report SDMX-HD Integration","target":"reporting","org":"mseaton","targetOrg":"openmrs"},{"source":"tracnetreportingsdmx","label":"Tracnet Report SDMX-HD Integration","target":"sdmxhdintegration","org":"mseaton","targetOrg":"Not Found"},{"source":"tracnetreportingsdmx","label":"Tracnet Report SDMX-HD Integration","target":"tracnetreporting","org":"mseaton","targetOrg":"Not Found"},{"source":"dcompare","label":"DCompare Module","target":"metadatasharing","org":"rubailly","targetOrg":"openmrs"},{"source":"cccgenerator","label":"CCC Generator","target":"reporting","org":"AMPATH","targetOrg":"openmrs"},{"source":"appui","label":"App UI Module","target":"appframework","org":"openmrs","targetOrg":"openmrs"},{"source":"appui","label":"App UI Module","target":"uiframework","org":"openmrs","targetOrg":"openmrs"},{"source":"appui","label":"App UI Module","target":"emrapi","org":"openmrs","targetOrg":"openmrs"},{"source":"appui","label":"App UI Module","target":"uicommons","org":"openmrs","targetOrg":"openmrs"},{"source":"appframeworkadmin","label":"App Framework Admin Module","target":"uiframework","org":"bwolfe","targetOrg":"openmrs"},{"source":"chartsearchadvanced","label":"Advanced Chart Search Module","target":"uiframework","org":"tallevi12","targetOrg":"openmrs"},{"source":"chartsearchadvanced","label":"Advanced Chart Search Module","target":"uicommons","org":"tallevi12","targetOrg":"openmrs"},{"source":"chartsearchadvanced","label":"Advanced Chart Search Module","target":"appui","org":"tallevi12","targetOrg":"openmrs"},{"source":"chartsearchadvanced","label":"Advanced Chart Search Module","target":"appframework","org":"tallevi12","targetOrg":"openmrs"},{"source":"reportingobjectgroup","label":"Reporting Object Group","target":"reporting","org":"PIH","targetOrg":"openmrs"},{"source":"muzimaconsultation","label":"Muzima Consultation Module","target":"muzima","org":"muzima","targetOrg":"muzima"},{"source":"bom","label":"BOM Module","target":"htmlformentry","org":"rubailly","targetOrg":"openmrs"},{"source":"bom","label":"BOM Module","target":"reporting","org":"rubailly","targetOrg":"openmrs"},{"source":"bom","label":"BOM Module","target":"htmlwidgets","org":"rubailly","targetOrg":"openmrs"},{"source":"pacsintegration","label":"PACS Integration Module","target":"org.openmrs.event","org":"PIH","targetOrg":"Not Found"},{"source":"pacsintegration","label":"PACS Integration Module","target":"emr","org":"PIH","targetOrg":"PIH"},{"source":"pacsintegration","label":"PACS Integration Module","target":"radiologyapp","org":"PIH","targetOrg":"PIH"},{"source":"formconcepts","label":"Form concepts Module","target":"htmlformentry","org":"rubailly","targetOrg":"openmrs"},{"source":"formconcepts","label":"Form concepts Module","target":"metadatasharing","org":"rubailly","targetOrg":"openmrs"},{"source":"reportingsummary","label":"Reporting Based Clinical Summary Module Module","target":"reporting","org":"nribeka","targetOrg":"openmrs"},{"source":"mirebalaisreports","label":"Mirebalais Hospital Reporting Module","target":"reporting","org":"PIH","targetOrg":"openmrs"},{"source":"mirebalaisreports","label":"Mirebalais Hospital Reporting Module","target":"emr","org":"PIH","targetOrg":"PIH"},{"source":"mirebalaisreports","label":"Mirebalais Hospital Reporting Module","target":"patientregistration","org":"PIH","targetOrg":"PIH"},{"source":"mirebalaisreports","label":"Mirebalais Hospital Reporting Module","target":"mirebalaismetadata","org":"PIH","targetOrg":"PIH"},{"source":"messagingphr","label":"PHR Messaging Module","target":"messaging","org":"openmrs","targetOrg":"medic"},{"source":"messagingphr","label":"PHR Messaging Module","target":"personalhr","org":"openmrs","targetOrg":"Not Found"},{"source":"pihmalawi","label":"PIH Malawi Customizations","target":"reporting","org":"PIH","targetOrg":"openmrs"},{"source":"openhmis.inventory","label":"OpenHMIS Inventory Module","target":"webservices.rest","org":"OpenHMIS","targetOrg":"openmrs"},{"source":"openhmis.inventory","label":"OpenHMIS Inventory Module","target":"openhmis.commons","org":"OpenHMIS","targetOrg":"Not Found"},{"source":"openhmis.inventory","label":"OpenHMIS Inventory Module","target":"openhmis.backboneforms","org":"OpenHMIS","targetOrg":"OpenHMIS"},{"source":"paperrecord","label":"Paper Record Management Module","target":"uiframework","org":"PIH","targetOrg":"openmrs"},{"source":"paperrecord","label":"Paper Record Management Module","target":"emrapi","org":"PIH","targetOrg":"openmrs"},{"source":"paperrecord","label":"Paper Record Management Module","target":"idgen","org":"PIH","targetOrg":"Not Found"},{"source":"paperrecord","label":"Paper Record Management Module","target":"appui","org":"PIH","targetOrg":"openmrs"},{"source":"paperrecord","label":"Paper Record Management Module","target":"appframework","org":"PIH","targetOrg":"openmrs"},{"source":"paperrecord","label":"Paper Record Management Module","target":"coreapps","org":"PIH","targetOrg":"openmrs"},{"source":"dispensing","label":"Dispensing Module","target":"appframework","org":"openmrs","targetOrg":"openmrs"},{"source":"dispensing","label":"Dispensing Module","target":"emrapi","org":"openmrs","targetOrg":"openmrs"},{"source":"dispensing","label":"Dispensing Module","target":"appui","org":"openmrs","targetOrg":"openmrs"},{"source":"dispensing","label":"Dispensing Module","target":"htmlformentryui","org":"openmrs","targetOrg":"openmrs"},{"source":"dispensing","label":"Dispensing Module","target":"providermanagement","org":"openmrs","targetOrg":"openmrs"},{"source":"uiframeworkpatientsummarysupport","label":"UI Framework Patient Summary Support Module","target":"uiframework","org":"openmrs","targetOrg":"openmrs"},{"source":"calculation19ext","label":"Calculation 1.9 Extensions","target":"calculation","org":"rkorytkowski","targetOrg":"openmrs"},{"source":"webservices.rest19ext","label":"Rest Web Services 1.9 Extension","target":"webservices.rest","org":"openmrs","targetOrg":"openmrs"},{"source":"spike1","label":"Spike1 Module","target":"appframework","org":"nutsiepully","targetOrg":"openmrs"},{"source":"rwandaprimarycare","label":"Rwanda Primary Care Module","target":"addresshierarchyrwanda","org":"openmrs","targetOrg":"rubailly"},{"source":"rwandaprimarycare","label":"Rwanda Primary Care Module","target":"idgen","org":"openmrs","targetOrg":"Not Found"},{"source":"rwandaprimarycare","label":"Rwanda Primary Care Module","target":"namephonetics","org":"openmrs","targetOrg":"openmrs"},{"source":"radiologyrest","label":"Radiology Rest Module","target":"webservices.rest","org":"akhilrv","targetOrg":"openmrs"},{"source":"hiemonitoring","label":"HIE Monitoring Module","target":"rheapocadapter","org":"jembi","targetOrg":"Not Found"},{"source":"quicklabdataentry","label":"Quick Lab data entry","target":"mohtracportal","org":"oynomak","targetOrg":"Not Found"},{"source":"atd","label":"ATD","target":"dss","org":"openmrs","targetOrg":"openmrs"},{"source":"atd","label":"ATD","target":"chirdlutil","org":"openmrs","targetOrg":"openmrs"},{"source":"atd","label":"ATD","target":"chirdlutilbackports","org":"openmrs","targetOrg":"openmrs"},{"source":"cardiologyreport","label":"Cardiology Report","target":"reporting","org":"openmrs","targetOrg":"openmrs"},{"source":"chica","label":"Chica","target":"dss","org":"openmrs","targetOrg":"openmrs"},{"source":"chica","label":"Chica","target":"atd","org":"openmrs","targetOrg":"openmrs"},{"source":"chica","label":"Chica","target":"sockethl7listener","org":"openmrs","targetOrg":"openmrs"},{"source":"chica","label":"Chica","target":"rgccd","org":"openmrs","targetOrg":"openmrs"},{"source":"chica","label":"Chica","target":"chirdlutil","org":"openmrs","targetOrg":"openmrs"},{"source":"chica","label":"Chica","target":"chirdlutilbackports","org":"openmrs","targetOrg":"openmrs"},{"source":"chicaops","label":"Chica Operations","target":"dss","org":"openmrs","targetOrg":"openmrs"},{"source":"chicaops","label":"Chica Operations","target":"atd","org":"openmrs","targetOrg":"openmrs"},{"source":"chicaops","label":"Chica Operations","target":"chirdlutil","org":"openmrs","targetOrg":"openmrs"},{"source":"chicaops","label":"Chica Operations","target":"chirdlutilbackports","org":"openmrs","targetOrg":"openmrs"},{"source":"chicaops","label":"Chica Operations","target":"chica","org":"openmrs","targetOrg":"openmrs"},{"source":"chirdlutil","label":"chirdlutil","target":"chirdlutilbackports","org":"openmrs","targetOrg":"openmrs"},{"source":"datasetbuilder","label":"Dataset Builder","target":"reporting","org":"openmrs","targetOrg":"openmrs"},{"source":"dduipd","label":"DDU ipd module","target":"hospitalcore","org":"openmrs","targetOrg":"Not Found"},{"source":"ddupatientdashboard","label":"DDU Patient Dashboard","target":"hospitalcore","org":"openmrs","targetOrg":"Not Found"},{"source":"ddupatientqueue","label":"ddupatientqueue","target":"hospitalcore","org":"openmrs","targetOrg":"Not Found"},{"source":"dhisconnector","label":"DHIS Connector","target":"mirthmessaging","org":"openmrs","targetOrg":"openmrs"},{"source":"diabetesmanagement","label":"Diabetes Management","target":"medicalproblem","org":"openmrs","targetOrg":"openmrs"},{"source":"opd","label":"opd","target":"billing","org":"openmrs","targetOrg":"Not Found"},{"source":"epihandy","label":"EpiHandy","target":"formEntry","org":"openmrs","targetOrg":"Not Found"},{"source":"htmlformentrydesigner","label":"HTML Form Entry Designer","target":"htmlformentry","org":"openmrs","targetOrg":"openmrs"},{"source":"htmlformentrydesigner","label":"HTML Form Entry Designer","target":"htmlwidgets","org":"openmrs","targetOrg":"openmrs"},{"source":"idgenws-parent","label":"IDGen Web Service","target":"idgen","org":"openmrs","targetOrg":"Not Found"},{"source":"idgenws-parent","label":"IDGen Web Service","target":"webservices.rest","org":"openmrs","targetOrg":"openmrs"},{"source":"inpatientcare","label":"Inpatient Care","target":"medicalproblem","org":"openmrs","targetOrg":"openmrs"},{"source":"logic","label":"Logic Module","target":"org.openmrs.calculation","org":"openmrs","targetOrg":"Not Found"},{"source":"mdrtbpatientchartwidgets","label":"Mdrtb Patient Chart Widgets","target":"htmlformentry","org":"openmrs","targetOrg":"openmrs"},{"source":"namibiadefense","label":"Namibia Defense","target":"htmlformentry","org":"openmrs","targetOrg":"openmrs"},{"source":"namibiadefense","label":"Namibia Defense","target":"ui.springmvc","org":"openmrs","targetOrg":"openmrs"},{"source":"nbs","label":"nbs","target":"dss","org":"openmrs","targetOrg":"openmrs"},{"source":"nbs","label":"nbs","target":"atd","org":"openmrs","targetOrg":"openmrs"},{"source":"nbs","label":"nbs","target":"sockethl7listener","org":"openmrs","targetOrg":"openmrs"},{"source":"nbs","label":"nbs","target":"chirdlutil","org":"openmrs","targetOrg":"openmrs"},{"source":"ncd","label":"NCD","target":"mrngen","org":"openmrs","targetOrg":"openmrs"},{"source":"ncd","label":"NCD","target":"messaging","org":"openmrs","targetOrg":"medic"},{"source":"nealreporting","label":"Neal Reporting","target":"reportingcompatibility","org":"openmrs","targetOrg":"Not Found"},{"source":"nutrition","label":"Nutrition Module","target":"household","org":"openmrs","targetOrg":"openmrs"},{"source":"patientchartwidgets","label":"Patient Chart Widgets","target":"htmlformentry","org":"openmrs","targetOrg":"openmrs"},{"source":"pearlgrlz","label":"Pearl Grlz","target":"dss","org":"openmrs","targetOrg":"openmrs"},{"source":"pearlgrlz","label":"Pearl Grlz","target":"atd","org":"openmrs","targetOrg":"openmrs"},{"source":"pearlgrlz","label":"Pearl Grlz","target":"chirdlutil","org":"openmrs","targetOrg":"openmrs"},{"source":"pihhaiti","label":"PIH Haiti Customizations","target":"reporting","org":"openmrs","targetOrg":"openmrs"},{"source":"pihlesothotbupload","label":"PIH Lesotho TB Upload","target":"spreadsheetupload","org":"openmrs","targetOrg":"openmrs"},{"source":"regimenreporting","label":"Regimen Reporting","target":"regimen","org":"openmrs","targetOrg":"openmrs"},{"source":"regimenreporting","label":"Regimen Reporting","target":"reporting","org":"openmrs","targetOrg":"openmrs"},{"source":"remoteregistration","label":"Remote Registration Module","target":"remoteformentry","org":"openmrs","targetOrg":"openmrs"},{"source":"reporttemplate","label":"Report Template Module","target":"versionedfileupload","org":"openmrs","targetOrg":"openmrs"},{"source":"rgccd","label":"RG CCD","target":"chirdlutil","org":"openmrs","targetOrg":"openmrs"},{"source":"rgccd","label":"RG CCD","target":"chirdlutilbackports","org":"openmrs","targetOrg":"openmrs"},{"source":"rgrta","label":"Rgrta","target":"dss","org":"openmrs","targetOrg":"openmrs"},{"source":"rgrta","label":"Rgrta","target":"atd","org":"openmrs","targetOrg":"openmrs"},{"source":"rgrta","label":"Rgrta","target":"sockethl7listener","org":"openmrs","targetOrg":"openmrs"},{"source":"rgrta","label":"Rgrta","target":"chirdlutil","org":"openmrs","targetOrg":"openmrs"},{"source":"sockethl7listener","label":"sockethl7listener","target":"chirdlutil","org":"openmrs","targetOrg":"openmrs"},{"source":"sockethl7listener","label":"sockethl7listener","target":"chirdlutilbackports","org":"openmrs","targetOrg":"openmrs"},{"source":"tbla","label":"TB in LA","target":"mrngen","org":"openmrs","targetOrg":"openmrs"},{"source":"tracnetreport","label":"TRACNet Report","target":"reporting","org":"openmrs","targetOrg":"openmrs"},{"source":"tracnetreport","label":"TRACNet Report","target":"sdmxhdintegration","org":"openmrs","targetOrg":"Not Found"},{"source":"tracnetreport","label":"TRACNet Report","target":"tracnetreporting","org":"openmrs","targetOrg":"Not Found"},{"source":"ui.springmvc","label":"Spring MVC UI Framework","target":"htmlwidgets","org":"openmrs","targetOrg":"openmrs"},{"source":"ui.springmvc","label":"Spring MVC UI Framework","target":"htmlformentry","org":"openmrs","targetOrg":"openmrs"}]; | |
var TRANSITION_DURATION = 150; | |
var HIGHLIGHT_COLOR = "#FF4"; | |
var IN_COLOR = "darkblue"; | |
var OUT_COLOR = "red"; | |
var DEFAULT_STROKE = "#666" | |
var nodes = {}; | |
var orgs = {}; | |
// Compute the distinct nodes from the links. | |
links.forEach(function(link) { | |
link.source = nodes[link.source] || (nodes[link.source] = {name: link.source}); | |
link.target = nodes[link.target] || (nodes[link.target] = {name: link.target}); | |
link.source.label = link.label; | |
link.source.org = link.org; | |
link.target.ins = link.target.ins + 1 || 1; | |
link.target.org = link.targetOrg; | |
// add source and target orgs to orgs object | |
if (orgs[link.org] == null) { orgs[link.org] = { org: link.org }; } | |
orgs[link.org].count = orgs[link.org].count + 1 || 1; | |
if (orgs[link.targetOrg] == null) { orgs[link.targetOrg] = { org: link.targetOrg }; } | |
orgs[link.targetOrg].count = orgs[link.targetOrg].count + 1 || 1; | |
}); | |
// convert orgs to an array of objects | |
var orgArray = []; | |
var others = 0; | |
for (var k in orgs) { | |
// ignore orgs with just one repo | |
if (orgs[k].count > 1) | |
orgArray.push(orgs[k]); | |
else | |
others++; | |
} | |
// sort to put largest at top | |
orgArray.sort(function(a,b){ | |
return b.count - a.count; | |
}); | |
// add the catch-all at the bottomn | |
// orgArray.push({ org: "Other", count: others }); | |
// generate a color scale based on count | |
var colorscale = d3.scale.linear() | |
// .domain([2, orgArray[0].count]) | |
.domain([0, orgArray.length/2, orgArray.length]) | |
.interpolate(d3.interpolateRgb) | |
.range(["#3D89E3", "#CF826D", "#BAA860"]); | |
// used to return a color based on org name | |
function colorize(org) { | |
// return colorscale(orgs[org].count); | |
for (i=0; i<orgArray.length; i++) { | |
if (orgArray[i].org == org) { | |
return colorscale(i); | |
} | |
} | |
} | |
// dynamically set width and height based on viewport | |
var width = $("#chart").width() - 20, height = $(document).height() - 50; | |
// force directed graph settings | |
var force = d3.layout.force() | |
.nodes(d3.values(nodes)) | |
.links(links) | |
.size([width, height]) | |
.linkDistance(120) | |
.charge(-250) | |
.on("tick", tick).start(); | |
var svg = d3.select("#chart") | |
.append("svg") | |
.attr("width", width) | |
.attr("height", height) | |
.append("g") | |
.call(d3.behavior.zoom().on("zoom", redraw)) | |
.append("g"); | |
// for zooming | |
var baseplane = svg.append('svg:rect') | |
.attr('width', width) | |
.attr('height', height) | |
.attr('fill', 'white') | |
.on('click', resetGraph); | |
var chart = svg.append("g"); | |
// Per-type markers, as they don't inherit styles. | |
chart.append("defs").selectAll("marker") | |
.data(["in", "out", "normal"]) | |
.enter() | |
.append("marker") | |
.attr("id", function(d) { return d; }) | |
.attr("viewBox", "0 0 6 6") | |
.attr("refX", 9) | |
.attr("refY", 3) | |
.attr("markerWidth", 7) | |
.attr("markerHeight", 7) | |
.attr("orient", "auto") | |
.append("path") | |
.classed("marker", true) | |
.style("stroke-width", 0) | |
.style("opacity", 1) | |
.attr("d", "M0,3v-3l6,3l-6,3z"); | |
// arrow ends | |
var path = chart.append("g").selectAll("path") | |
.data(force.links()) | |
.enter() | |
.append("path") | |
.attr("class", function(d) { return "link " + d.org; }) | |
.attr("source", function(d) { return d.source.name; }) | |
.attr("target", function(d) { return d.target.name; }) | |
.style("marker-end", "url(#normal)"); | |
// nodes | |
var circle = chart.append("g").selectAll("circle") | |
.data(force.nodes()) | |
.enter() | |
.append("circle") | |
.attr("r", function(d){ return d.ins * 0.5 + 4 || 4; }) | |
.attr("source", function(d){ return d.name; }) | |
.attr("org", function(d){ return d.org; }) | |
.style("fill", function(d, i){ return colorize(d.org); }) | |
.style("stroke-width", "0") | |
.style("stroke", DEFAULT_STROKE) | |
// .on('mouseover', function(d, i) { transitionIn(d.org); }) | |
// .on('mouseout', function(d, i) { transitionOut(); }) | |
.on('click', function(d) { showPaths(d.name); }) | |
.call(force.drag); | |
// node labels | |
var text = chart.append("g").selectAll("text") | |
.data(force.nodes()) | |
.enter() | |
.append("text") | |
.attr("x", 8) | |
.attr("y", ".31em") | |
.attr("source", function(d){ return d.name; }) | |
.style("font-size", function(d){ return (d.ins * 0.5 + 8 || 8) + "px"; }) | |
.text(function(d) { return d.label || d.name; }); | |
// legend | |
var legendHeight = 20; | |
var legendGap = 5; | |
var legendTextHeight = 10; | |
var legend = svg.append("g") | |
.attr("class", "legend"); | |
// legend blocks | |
legend.selectAll("rect") | |
.data(orgArray) | |
.enter() | |
.append("rect") | |
.attr("x", 0) | |
.attr("y", function(d, i){ return (legendGap + legendHeight) * i; }) | |
.attr("width", 100) | |
.attr("height", legendHeight) | |
.attr("org", function(d) { return d.org; }) | |
.style("fill", function(d, i) { return colorize(d.org); }) | |
.on('mouseover', function(d, i) { transitionIn(d.org); }) | |
.on('mouseout', function(d, i) { transitionOut(); }); | |
// legend labels | |
legend.selectAll("text") | |
.data(orgArray) | |
.enter() | |
.append("text") | |
.attr("x", 5) | |
.attr("y", function(d, i){ return (legendHeight / 2) + 3 + (legendGap + legendHeight) * i; }) | |
.attr("org", function(d){ return d.org; }) | |
.style("font-size", legendTextHeight + "px") | |
.style("text-shadow", "none") | |
.style("font-weight", "bold") | |
.style("font-color", "white") | |
.text(function(d) { return d.org; }); | |
// Use elliptical arc path segments to doubly-encode directionality. | |
function tick() { | |
path.attr("d", linkArc); | |
circle.attr("transform", transform); | |
text.attr("transform", transform); | |
} | |
function linkArc(d) { | |
var dx = d.target.x - d.source.x, dy = d.target.y - d.source.y, dr = Math.sqrt(dx * dx + dy * dy); | |
return "M" + d.source.x + "," + d.source.y + "A" + dr + "," + dr + " 0 0,1 " + d.target.x + "," + d.target.y; | |
} | |
function transform(d) { | |
return "translate(" + d.x + "," + d.y + ")"; | |
} | |
function redraw() { | |
chart.attr("transform", "translate(" + d3.event.translate + ") scale(" + d3.event.scale + ")"); | |
} | |
function transitionIn(org) { | |
d3.select(".legend rect[org='" + org + "']") | |
.classed("hover", true) | |
.transition() | |
.duration(TRANSITION_DURATION) | |
.style("fill", HIGHLIGHT_COLOR); | |
d3.selectAll("circle[org='" + org + "']") | |
.classed("hover", true) | |
.transition() | |
.duration(TRANSITION_DURATION) | |
.attr("r", 30) | |
.style("stroke-width", "1") | |
.style("stroke", HIGHLIGHT_COLOR); | |
} | |
function transitionOut() { | |
d3.selectAll(".legend rect") | |
.classed("hover", false) | |
.transition() | |
.duration(TRANSITION_DURATION) | |
.style("fill", function (d, i) { return colorize(d.org); }); | |
d3.selectAll("circle") | |
.classed("hover", false) | |
.transition() | |
.duration(TRANSITION_DURATION) | |
.attr("r", function(d){ return d.ins * 0.5 + 4 || 4; }) | |
.style("stroke-width", 0) | |
.style("stroke", DEFAULT_STROKE); | |
} | |
function showPaths(x) { | |
resetGraph(); | |
// mark this node as selected | |
d3.selectAll("circle[source='" + x + "']") | |
.classed("selected", true) | |
.classed("lit", true) | |
.style("fill", HIGHLIGHT_COLOR) | |
.style("opacity", "1"); | |
showDependencies(x); | |
showDependenciesOn(x); | |
killEverythingElse(); | |
// re-light the markers ... | |
d3.selectAll("path.marker") | |
.style("opacity", 1); | |
} | |
function killEverythingElse() { | |
// kill the paths | |
d3.selectAll("path:not(.lit)") | |
.style("stroke", DEFAULT_STROKE) | |
.style("opacity", "0.25") | |
.style("marker-end", "url(#normal)"); | |
// kill the circles | |
d3.selectAll("circle:not(.lit)") | |
.classed("selected", false) | |
.style("opacity", "0.25") | |
.style("fill", function(d, i){ colorize(d.org); }); | |
// kill the texts | |
d3.selectAll("text:not(.lit)") | |
.classed("selected", false) | |
.style("opacity", "0.25"); | |
// kill the legend | |
d3.selectAll(".legend rect:not(.lit), .legend text:not(.lit)") | |
.transition() | |
.duration(TRANSITION_DURATION) | |
.style("opacity", "0.25"); | |
} | |
function showDependencies(source) { | |
d3.selectAll("circle[source='" + source + "']:not(.selected)") | |
.classed("lit", true) | |
.transition() | |
.duration(TRANSITION_DURATION) | |
.style("fill", OUT_COLOR) | |
.style("opacity", "1"); | |
d3.selectAll("text[source='" + source + "']") | |
.classed("lit", true) | |
.transition() | |
.duration(TRANSITION_DURATION) | |
.style("opacity", "1"); | |
d3.selectAll("path[source='" + source + "']") | |
.classed("lit", true) | |
.transition() | |
.duration(TRANSITION_DURATION) | |
.style("marker-end", "url(#out)") | |
.style("stroke", OUT_COLOR) | |
.style("opacity", "1") | |
.call(showDependenciesForPath); | |
} | |
function showDependenciesForPath(path) { | |
if (path != null) { | |
path.each(function(p) { | |
lightUpLegendFor(p.source.org); | |
lightUpLegendFor(p.target.org); | |
showDependencies(p.target.name); | |
}); | |
} | |
} | |
function showDependenciesOn(target) { | |
d3.selectAll("path[target='" + target + "']") | |
.classed("lit", true) | |
.transition() | |
.duration(TRANSITION_DURATION) | |
.style("marker-end", "url(#in)") | |
.style("stroke", IN_COLOR) | |
.style("opacity", 1) | |
.call(showTargetNodesForPath); | |
} | |
function showTargetNodesForPath(path) { | |
if (path != null) { | |
path.each(function(p) { | |
d3.selectAll("circle[source='" + p.source.name + "']") | |
.classed("lit", true) | |
.transition() | |
.duration(TRANSITION_DURATION) | |
.style("fill", IN_COLOR) | |
.style("opacity", "1"); | |
d3.selectAll("text[source='" + p.source.name + "']") | |
.classed("lit", true) | |
.transition() | |
.duration(TRANSITION_DURATION) | |
.style("opacity", "1"); | |
lightUpLegendFor(p.source.org); | |
lightUpLegendFor(p.target.org); | |
}); | |
} | |
} | |
function lightUpLegendFor(org) { | |
d3.selectAll("rect[org='" + org + "'], text[org='" + org + "']") | |
.classed("lit", true) | |
.transition() | |
.duration(TRANSITION_DURATION) | |
.style("opacity", "1"); | |
} | |
function resetGraph(){ | |
d3.selectAll("rect, circle, path, text") | |
.classed("lit", false) | |
.classed("selected", false) | |
// .transition() | |
// .duration(TRANSITION_DURATION) | |
.style("opacity", 1); | |
d3.selectAll("path") | |
.style("stroke", DEFAULT_STROKE) | |
.style("marker-end", "url(#normal)"); | |
d3.selectAll("circle") | |
.style("fill", function(d, i){ return colorize(d.org); }) | |
} | |
</script> | |
</body> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import groovy.json.* | |
// prepare ourselves for ssl errors | |
System.setProperty("jsse.enableSNIExtension", "false"); | |
def slurper = new JsonSlurper() | |
data = slurper.parseText(new File("github-modules.json").text).items | |
out = [] | |
def plethora = [:] | |
println "github ..." | |
data.each{ | |
baseurl = "https://raw.githubusercontent.com/" + [it.full_name, it.master_branch].join("/") | |
pomurl = baseurl + "/pom.xml" | |
configurl = baseurl + "/omod/src/main/resources/config.xml" | |
anturl = baseurl + "/metadata/config.xml" | |
pom = null | |
config = null | |
// first, try to get maven-based files | |
try { | |
pom = new XmlSlurper().parseText(pomurl.toURL().text) | |
config = new XmlSlurper().parseText(configurl.toURL().text) | |
} catch(e) { | |
print "not a maven project ... " | |
// now, try to get ant-based files | |
try { | |
config = new XmlSlurper().parseText(anturl.toURL().text) | |
println "success!" | |
} catch(x) { | |
println "couldn't do it ... " + it.full_name | |
} | |
} | |
if (config) { | |
id = pom ? "${pom.artifactId}" : "${config.id}" | |
name = pom ? "${pom.name}" : "${config.name}" | |
module = [ artifact: id, name: name, org: "${it.owner.login}", forks: it.forks_count ] | |
module.required = config.require_modules.children().collect({ | |
it.text().replaceAll("org.openmrs.module.", "").trim().replaceAll("\n", "").replaceAll("\t", "") | |
}) | |
if (plethora[module.artifact] == null || plethora[module.artifact].forks < module.forks) { | |
plethora[module.artifact] = module | |
} | |
} | |
} | |
// and now for the subversion repositories ... | |
println "subversion ... " | |
svnrepos = ["abandoned", "amrspharmacy", "amrsreporttools", "archetypes", "atd", "atomfeed", "backports14x", "basicmodule", "billing", "bloodbank", "cardiologyreporting", "chica", "chicaops", "childvctreport", "chirdlutil", "chirdlutilbackports", "chwdashboard", "cleaningvoided", "clinicalsummary", "cohortcreation", "cohortreports", "comparelists", "conceptimportexport", "conceptproposal", "databasebackup", "databasemessages", "datadeletion", "dataentrystatistics", "dataqualitytools", "datasetbuilder", "dduipd", "ddupatientdashboard", "ddupatientqueue", "ddurks", "devexamples", "dhisconnector", "diabetesmanagement", "doonoutpatient", "doonpatientsummary", "doubleentryreconciliation", "draftforms", "drugrequirements", "dss", "encounterattribute", "epihandy", "exceldataimport", "exportccd", "exporttocsvexample", "ezvacimmunization", "flashmediaviewer", "flowsheet", "foodprogram", "form2program", "formcompletion", "formdataexport", "formimportexport", "frontlinesmsmedic", "globalpropertyeditor", "gmapsimageviewer", "groovyforms", "growthchart", "helloworld", "hivtreamentfailure", "hospitalcore", "hr", "htmlformentrydesigner", "i2b2export", "idcards", "idgenws", "imageimport", "inpatientcare", "inventory", "jasperreport", "jsslab", "kettle", "labentry", "labsconnector", "ldap", "logic", "logicws", "longitudinaldataviewer", "mailscheduler", "mdrtb", "mdrtbpatientchartwidgets", "medicalproblem", "mentalhealth", "metadata", "mflgenerator", "mirthadmin", "mirthmessaging", "mrngen", "msf", "namibiadefense", "nbs", "ncd", "nealreporting", "nutrition", "obsgroupexport", "obstostate", "occmodule", "odamocklogicws", "openempi", "orderentry", "patientchartwidgets", "patientdatatransfer", "patientimage", "patientlookup", "patientnotes", "patientsearchbycohortdef", "patientsearchformlinks", "patientvisitscheduler", "pearlgrlz", "personportrait", "perufitnessstudy", "pharmacydataexport", "pihconsultsheet", "pihhacks", "pihhaiti", "pihlesothotbupload", "piht1000patientdataexport", "pixpdq", "portletlibrary", "printing", "programoverview", "quickstats", "radiology", "randomization", "raxa-jss", "regadbintegration", "regimen", "regimenpickup", "regimenreporting", "register", "registration", "releasetestinghelper", "remarks", "reminders", "remotedatatransfer", "remoteregistration", "reporttemplate", "requestaccount", "researchdataexport", "researchencounters", "restrictbyrole", "restrictencounterbyrole", "rgccd", "rgrta", "rolebasedhomepage", "rwandaprimarycare", "schedulerquartz", "search", "searchkeylogging", "sharemetadata", "simpledispensing", "simplefinance", "simplepharmacy", "siteolympics", "smartcontainer", "smsserver", "sockethl7listener", "specimentracking", "spreadsheetupload", "stat", "stateprocessing", "syncsds", "tbla", "touchscreen", "tracnetreport", "tracplus", "tsb", "ui.springmvc", "versionedfileupload", "visitmanagement", "visitregister", "visitscheduler", "whomod", "xformsdesigner", "xformsorbeon"]; | |
svnrepos.each { | |
baseurl = "https://svn.openmrs.org/openmrs-modules/" + it | |
hastrunk = false | |
try { | |
ack = (baseurl + "/trunk/").toURL().text | |
hastrunk = true | |
} catch(x) { | |
// pass | |
} | |
if (hastrunk) { | |
baseurl += "/trunk" | |
} | |
pomurl = baseurl + "/pom.xml" | |
configurl = baseurl + "/omod/src/main/resources/config.xml" | |
anturl = baseurl + "/metadata/config.xml" | |
pom = null | |
config = null | |
try { | |
pom = new XmlSlurper().parseText(pomurl.toURL().text) | |
config = new XmlSlurper().parseText(configurl.toURL().text) | |
} catch(e) { | |
print "not a maven project ... " | |
// now, try to get ant-based files | |
try { | |
config = new XmlSlurper().parseText(anturl.toURL().text) | |
println "success!" | |
} catch(x) { | |
println "couldn't do it ... " + it | |
} | |
} | |
if (config) { | |
id = pom ? "${pom.artifactId}" : "${config.id}" | |
name = pom ? "${pom.name}" : "${config.name}" | |
module = [ artifact: id, name: name, org: "openmrs", forks: 999 ] | |
module.required = config.require_modules.children().collect({ | |
it.text().replaceAll("org.openmrs.module.", "").trim().replaceAll("\n", "").replaceAll("\t", "") | |
}) | |
if (plethora[module.artifact] == null || plethora[module.artifact].forks < module.forks) { | |
plethora[module.artifact] = module | |
} | |
} | |
} | |
plethora.each { | |
module, props -> | |
props.required.each { | |
requiredModule -> | |
rm = plethora.get(requiredModule) | |
targetOrg = rm ? rm.org : "Not Found" | |
out.add([ source: "${props.artifact}", label: "${props.name}", target: "${requiredModule}", org: "${props.org}", targetOrg: "${targetOrg}" ]) | |
} | |
} | |
new File("vizdata.json").write(new JsonBuilder(out).toString()) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
out = []; | |
$("div .module").each(function(){ | |
if ($(this).find("a.migrated").length == 0) { | |
out.push($(this).find("a").attr("href")); | |
} | |
}); | |
$("body").append("div").text(out); | |
console.log(out); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment