Widget:PillIdentifier: Difference between revisions
Jump to navigation
Jump to search
No edit summary |
No edit summary |
||
(70 intermediate revisions by the same user not shown) | |||
Line 1: | Line 1: | ||
<includeonly> | <includeonly> | ||
<script content-type= "application/javascript" src="http://www.wikidoc.org/ | <script content-type= "application/javascript" src="http://www.wikidoc.org/extensions/raty/md5.js"></script> | ||
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script> | <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script> | ||
<link rel="stylesheet" href="https://ajax.googleapis.com/ajax/libs/jqueryui/1.11.4/themes/smoothness/jquery-ui.css"> | <link rel="stylesheet" href="https://ajax.googleapis.com/ajax/libs/jqueryui/1.11.4/themes/smoothness/jquery-ui.css"> | ||
<script src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.11.4/jquery-ui.min.js"></script> | <script src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.11.4/jquery-ui.min.js"></script> | ||
<script type"text/javascript"> | <script type="text/javascript"> | ||
$(document).ready(loadResources); | $(document).ready(loadResources); | ||
Line 19: | Line 19: | ||
} | } | ||
})(); | })(); | ||
$("#firstHeading").remove(); | |||
$("#searchbox").remove(); | |||
$('#submit').click(runQuery); | |||
$('.navTool').click(nav); | |||
$("#reset").click(resetForm); | |||
$(".pillShapeOption").click(function(){ | |||
$(".pillShapeOption").children("img").css("border",""); | |||
$(this).children("img:first").css("border","thin solid black"); | |||
$(this).children("img:first").css("border-radius","10%"); | |||
}); | |||
$(".pillColorOption").click(function(){ | |||
$(".pillColorOption").children("img").css("border",""); | |||
$(this).children("img:first").css("border","thin solid black"); | |||
$(this).children("img:first").css("border-radius","10%"); | |||
}); | |||
$(".pillScoreOption").click(function(){ | |||
$(".pillScoreOption").children("img").css("border",""); | |||
$(this).children("img:first").css("border","thin solid black"); | |||
$(this).children("img:first").css("border-radius","10%"); | |||
}); | |||
$("#slider").slider({ | $("#slider").slider({ | ||
min: 0, | min: 0, | ||
Line 62: | Line 82: | ||
$('.pillColorOption').click(updateFormClick); | $('.pillColorOption').click(updateFormClick); | ||
$('.pillScoreOption').click(updateFormClick); | $('.pillScoreOption').click(updateFormClick); | ||
$('.pillMiscContainer').change(updateFormText); | |||
}; | |||
function resetForm(){ | |||
$('.pillShapeOption').children("img").css("border",""); | |||
$('.pillColorOption').children("img").css("border",""); | |||
$('.pillScoreOption').children("img").css("border",""); | |||
$("#selectedShape").val(""); | |||
$("#selectedColor").val(""); | |||
$("#selectedScoring").val(""); | |||
$("#selectedImprint").val(""); | |||
$("#selectedNDC").val(""); | |||
$("#selectedIngred").val(""); | |||
$(".propertyContainerActive").attr("class", "propertyContainerInactive"); | |||
$("#queryContainer_Shape").attr("class", "propertyContainerActive"); | |||
$("#back").css("visibility","hidden"); | |||
$('#resultsTable-container').html(''); | |||
}; | |||
function buildQueryParameters(){ | |||
var queryShape = ""; | |||
var queryColor = ""; | |||
var queryScoring = ""; | |||
var queryImprint = ""; | |||
var queryMinSize = ""; | |||
var queryMaxSize = ""; | |||
var queryNDC = ""; | |||
var queryIngred = ""; | |||
if (document.getElementById('selectedShape').value) | |||
{ | |||
var queryShape = '[[Pill%20Shape::' + document.getElementById('selectedShape').value + ']]'; | |||
} | |||
if (document.getElementById('selectedColor').value) | |||
{ | |||
var queryColor = '[[Pill%20Color::' + document.getElementById('selectedColor').value + ']]' | |||
} | |||
if (document.getElementById('selectedScoring').value) | |||
{ | |||
var queryScoring = '[[Pill%20Scoring::' + document.getElementById('selectedScoring').value + ']]' | |||
} | |||
if (document.getElementById('selectedImprint').value) | |||
{ | |||
var queryImprint = '[[Pill%20Imprint::' + document.getElementById('selectedImprint').value + ']]' | |||
} | |||
if (document.getElementById('selectedMinSize').value) | |||
{ | |||
var queryMinSize = '[[Pill%20Size%20(mm)::>' + document.getElementById('selectedMinSize').value + ']]' | |||
} | |||
if (document.getElementById('selectedMaxSize').value) | |||
{ | |||
var queryMaxSize = '[[Pill%20Size%20(mm)::<' + document.getElementById('selectedMaxSize').value + ']]' | |||
} | |||
if (document.getElementById('selectedNDC').value) | |||
{ | |||
var queryNDC = '[[NDC::' + document.getElementById('selectedNDC').value + ']]' | |||
} | |||
if (document.getElementById('selectedIngred').value) | |||
{ | |||
var selectedIngredArray = document.getElementById('selectedIngred').value.split(','); | |||
$.each(selectedIngredArray, function(index, value){ | |||
selectedIngredArray[index] = '[[Pill%20Ingred::' + value.trim() + ']]'; | |||
}); | |||
var queryIngred = selectedIngredArray.join(""); | |||
} | |||
return queryShape+queryColor+queryScoring+queryImprint+queryMinSize+queryMaxSize+queryNDC+queryIngred; | |||
}; | |||
function runQuery() { | |||
$('#resultsTable-container').html(''); | |||
var queryParameters = buildQueryParameters(); | |||
var printoutRequests = "|?Pill%20Imprint|?Pill%20Dosage|?Pill%20Ingred|?Pill%20Color|?Pill%20Shape|?Pill%20Size%20(mm)|?Pill%20Scoring|?NDC|?Pill%20Name"; | |||
var jsonURL = "http://www.wikidoc.org/api.php?action=ask&query="+queryParameters+printoutRequests+"&format=json"; | |||
$.getJSON(jsonURL, function (data) { | |||
if(countProperties(data.query.results) > 0){ | |||
$.each(data.query.results, function(ind, val) { | |||
///////////////////////////////////////////////////////////////////////// | |||
////// Store each returned result ////// | |||
///////////////////////////////////////////////////////////////////////// | |||
// | |||
//If the .getJSON() function is able to successfully receive information | |||
//from the WikiDoc API, it will begin to execute the unnamed function we | |||
//have provided. The data that is returned is in JSON format, meaning | |||
//that we will have lots of objects within objects. Our function says | |||
//that for EACH property of data.query.results (that is, each returned | |||
//result from the query) we should perform the following operations. | |||
// | |||
//We will first store all the results as local variables. Some of these | |||
//results will need to be converted to a string, so don't be alarmed if | |||
//you see some string() methods. After storing our variables,we | |||
//construct a hyperlink and image URL. Lastly, we add a row to the | |||
//our results table. | |||
// | |||
//The EACH loop will run through all of the described steps before | |||
//starting with the next returned result. Doing this will build a table | |||
//of our results, row by row. | |||
drugNameFull = val.fulltext; | |||
drugNameShort = drugNameFull.split("#")[0]; | |||
pillImprint = val.printouts["Pill Imprint"]; | |||
pillDosage = val.printouts["Pill Dosage"]; | |||
pillIngred = val.printouts["Pill Ingred"]; | |||
pillColor = val.printouts["Pill Color"]; | |||
pillShape = val.printouts["Pill Shape"]; | |||
pillSize = val.printouts["Pill Size (mm)"]; | |||
pillScoring = val.printouts["Pill Scoring"]; | |||
ndc = val.printouts["NDC"]; | |||
pillName = String(val.printouts["Pill Name"][0]).split(' ').join('_'); | |||
///////////////////////////////////////////////////////////////////////// | |||
////// Generate the URL to the image. ////// | |||
///////////////////////////////////////////////////////////////////////// | |||
// | |||
//When a picture is uploaded, the server will place the file in a | |||
//directory. This directory is based upon the MD5 hashed name of file. A | |||
//file named "Example.jpg" will have an MD5 hashed name of: | |||
// "a91fe217e45a700fc2dab0cc476f01c7." | |||
//The file would then be located at the following URl: | |||
// "http://static.wikidoc.org/a/a9/Example.jpg" | |||
//To generate the URL, we use the MD5 method provided in the CryptoJS lib | |||
//This means http://www.wikidoc.org/includes/raty/md5.js must be loaded | |||
//First we create the MD5 hash of the pill name | |||
md5 = String(CryptoJS.MD5(pillName)); | |||
//Next we build the directory name using the first two characters | |||
imageDirect = 'http://static.wikidoc.org/' + md5.charAt(0) + '/' + md5.substring(0,2) + '/' + pillName; | |||
///////////////////////////////////////////////////////////////////////// | |||
////// Create the Drug Name Hyperlink ////// | |||
///////////////////////////////////////////////////////////////////////// | |||
//Turn the spaces into underscores | |||
linkName = String(drugNameShort).split(' ').join('_'); | |||
//String together appropiate text to create the link | |||
drugNameLink = 'http://www.wikidoc.org/index.php/'+linkName; | |||
///////////////////////////////////////////////////////////////////////// | |||
////// Add each iteration of query results to the Results Table ////// | |||
///////////////////////////////////////////////////////////////////////// | |||
// | |||
//Adding the results parameters works in the following way. | |||
// The location of a specific table within the document is assigned to | |||
// the variable "table" | |||
// | |||
// A row is added the to table at the index location (ind being the | |||
// index of the .each() loop. | |||
// | |||
var pillContainer ='<div class="pillResult">' + | |||
'<a href="'+drugNameLink+'">' + | |||
'<img src="'+imageDirect+'" alt"'+drugNameShort+'">' + | |||
'</a>' + | |||
' <div class="pillResult-text">' + | |||
'<h1><a href="'+drugNameLink+'">'+drugNameShort+'</a></h1>' + | |||
'<h2>'+pillDosage+' (' + pillImprint + ')</h2>' + | |||
'<p>'+pillShape+', '+pillColor+', '+pillSize+' mm, Scored ' + pillScoring +', NDC: '+ndc+'</p>'+ | |||
'<p>'+pillIngred+'</p>' + | |||
'</div>' + | |||
'</div>'; | |||
//Add Values to the cells: | |||
$("#resultsTable-container").append(pillContainer); | |||
}); | |||
} else { | |||
$("#resultsTable-container").append('<div style="margin:auto"><span style="font-size:36px;">No Results Found. Please Check Back Later.</span></div>'); | |||
} | |||
}); | |||
$('#resultsTable-container').css("visibility", "visible"); | |||
} | |||
function updatePillSizeImages() { | |||
var minPillSize = $('#pillMinSize').val(); | |||
var maxPillSize = $('#pillMaxSize').val(); | |||
$( | var pillArr = [ | ||
"http://static.wikidoc.org/3/35/Pill_Size_1_mm.png", | |||
"http://static.wikidoc.org/3/35/Pill_Size_1_mm.png", | |||
"http://static.wikidoc.org/8/8a/Pill_Size_2_mm.png", | |||
"http://static.wikidoc.org/f/f7/Pill_Size_3_mm.png", | |||
"http://static.wikidoc.org/f/fb/Pill_Size_4_mm.png", | |||
"http://static.wikidoc.org/f/f2/Pill_Size_5_mm.png", | |||
"http://static.wikidoc.org/d/d8/Pill_Size_6_mm.png", | |||
"http://static.wikidoc.org/e/ec/Pill_Size_7_mm.png", | |||
"http://static.wikidoc.org/4/4d/Pill_Size_8_mm.png", | |||
"http://static.wikidoc.org/9/97/Pill_Size_9_mm.png", | |||
"http://static.wikidoc.org/3/36/Pill_Size_10_mm.png", | |||
"http://static.wikidoc.org/2/2e/Pill_Size_11_mm.png", | |||
"http://static.wikidoc.org/c/c5/Pill_Size_12_mm.png", | |||
"http://static.wikidoc.org/0/0d/Pill_Size_13_mm.png", | |||
"http://static.wikidoc.org/1/16/Pill_Size_14_mm.png", | |||
"http://static.wikidoc.org/4/4a/Pill_Size_15_mm.png", | |||
"http://static.wikidoc.org/e/ee/Pill_Size_16_mm.png", | |||
"http://static.wikidoc.org/8/86/Pill_Size_17_mm.png", | |||
"http://static.wikidoc.org/a/af/Pill_Size_18_mm.png", | |||
"http://static.wikidoc.org/e/ea/Pill_Size_19_mm.png", | |||
"http://static.wikidoc.org/e/e6/Pill_Size_20_mm.png", | |||
"http://static.wikidoc.org/e/e2/Pill_Size_21_mm.png", | |||
"http://static.wikidoc.org/a/a3/Pill_Size_22_mm.png", | |||
"http://static.wikidoc.org/b/b4/Pill_Size_23_mm.png", | |||
"http://static.wikidoc.org/c/cf/Pill_Size_24_mm.png", | |||
"http://static.wikidoc.org/9/92/Pill_Size_25_mm.png" | |||
]; | |||
$("#DisplaySmallSize").attr("src",pillArr[minPillSize]); | |||
$("#DisplayLargeSize").attr("src",pillArr[maxPillSize]); | |||
$("#selectedMinSize").val(minPillSize); | |||
$("#selectedMaxSize").val(maxPillSize); | |||
}; | |||
function updateFormClick(){ | |||
console.log($(this).data()['prop'] + ": " + $(this).data()['val']); | |||
var $this = $(this) | |||
var selectedProperty = $this.data()['prop']; | |||
var selectedValue = $this.data()['val']; | |||
$("#"+selectedProperty).val(selectedValue) | |||
}; | |||
function updateFormText(){ | |||
var $this = $(this); | |||
var selectedInput = $this.data()['inputname']; | |||
var selectedProperty = $this.data()['prop']; | |||
var selectedValue = $("#"+selectedInput).val(); | |||
console.log(selectedProperty + ": " + selectedValue); | |||
function | $("#"+selectedProperty).val(selectedValue); | ||
} | |||
var | function nav(){ | ||
var direction = $(this).data()["direction"]; | |||
var dirIndex = ""; | |||
var position = $(".propertyContainerActive").data()["order"]; | |||
$("#" | var positionArr = [ | ||
["", ""], | |||
["", "#queryContainer_Color"], | |||
["#queryContainer_Shape", "#queryContainer_Scoring"], | |||
["#queryContainer_Color", "#queryContainer_Size"], | |||
["#queryContainer_Scoring","#misc"], | |||
["#queryContainer_Size", ""] | |||
]; | |||
if (direction === "back"){ | |||
dirIndex = 0; | |||
} | |||
else if (direction === "next"){ | |||
dirIndex = 1; | |||
} | |||
else { | |||
console.log("Ruh-roh. Something happened in figuring out what direction to navigate"); | |||
} | |||
var newActiveDiv = positionArr[position][dirIndex]; | |||
$(".propertyContainerActive").attr("class", "propertyContainerInactive"); | |||
$(newActiveDiv).attr("class", "propertyContainerActive"); | |||
var nextPosition = $(newActiveDiv).data()["order"]; | |||
if (positionArr[nextPosition][0] == ""){ | |||
$("#back").css("visibility","hidden"); | |||
} | |||
else | |||
{ | |||
$("#back").css("visibility","visible"); | |||
} | |||
if (positionArr[nextPosition][1] == ""){ | |||
$("#next").css("visibility","hidden"); | |||
} | |||
else | |||
{ | |||
$("#next").css("visibility","visible"); | |||
} | } | ||
}; | }; | ||
function countProperties (obj) { | |||
var count = 0; | |||
for (var property in obj) { | |||
if (Object.prototype.hasOwnProperty.call(obj, property)) { | |||
count++; | |||
} | |||
} | |||
return count; | |||
} | |||
</script> | </script> | ||
<style type="text/css"> | <style type="text/css"> | ||
Line 133: | Line 383: | ||
margin-bottom:10px; | margin-bottom:10px; | ||
width: 95%; | width: 95%; | ||
} | |||
.propertyContainerInactive{ | |||
/*border: thin solid black;*/ | |||
display:inline-block; | |||
padding: 10px; | |||
margin: auto; | |||
margin-top:20px; | |||
margin-bottom:10px; | |||
width: 95%; | |||
display:none; | |||
} | } | ||
Line 172: | Line 433: | ||
width: 100px; | width: 100px; | ||
margin: 50px; | margin: 50px; | ||
cursor:pointer; | |||
} | } | ||
.pillColorOption { | .pillColorOption { | ||
Line 178: | Line 440: | ||
width: 100px; | width: 100px; | ||
margin: 50px; | margin: 50px; | ||
cursor:pointer; | |||
} | } | ||
.pillScoreOption { | .pillScoreOption { | ||
Line 184: | Line 447: | ||
width: 100px; | width: 100px; | ||
margin: 50px; | margin: 50px; | ||
cursor:pointer; | |||
} | } | ||
Line 254: | Line 518: | ||
} | } | ||
. | #pillIDNav div{ | ||
display:inline-block; | |||
cursor:pointer; | |||
} | |||
#formConatiner div{ | |||
display:inline-block; | |||
padding:5px; | |||
} | |||
#formContainer{ | |||
background:#6e6e6e; | |||
width: 60%; | |||
margin: auto; | |||
margin-top: 15px; | |||
padding: 15px; | |||
border-radius: 20px; | |||
color:white; | |||
} | |||
#formContainer h2{ | |||
margin-top: 0; | |||
color: white; | |||
text-shadow: 1px 1px 1px #000; | |||
} | |||
.pillResult{ | |||
display:table-row; | |||
} | |||
.pillResult img{ | |||
width:150px; | |||
height:auto; | |||
display:table-cell; | |||
vertical-align: middle; | |||
border-radius:50%; | |||
margin:10px; | |||
} | |||
.pillResult-text{ | |||
display:table-cell; | |||
vertical-align:top; | |||
padding-left:5px; | |||
} | |||
.pillResult-text h1{ | |||
margin:0px; | |||
font-size:24px; | |||
} | |||
.pillResult-text h2{ | |||
margin:0px; | |||
font-size:18px; | |||
} | |||
.pillResult-text p{ | |||
margin:0px; | |||
font-size:16px; | |||
} | } | ||
</style> | |||
<div id="pillIdentifierContainer"> | <div id="pillIdentifierContainer"> | ||
<div id="pillIdentiferTitle"> | <div id="pillIdentiferTitle"> | ||
<span>Pill Identifier</span> | <span>Pill Identifier</span> | ||
</div> | |||
<div id="formContainer"> | |||
<h2>Selected Properties</h2> | |||
<form id="selectedProperties" action="" method="get"> | |||
<div id="selectedShape-container" class="ui-button"> | |||
<span>Shape:</span><input readonly type="text" name="selectedShape" id="selectedShape" size="10" value=""> | |||
</div> | |||
<div id="selectedColor-container" class="ui-button"> | |||
<span>Color:</span><input readonly type="text" name="selectedColor" id="selectedColor" size="10" value=""> | |||
</div> | |||
<div id="selectedScoring-container" class="ui-button"> | |||
<span>Scoring:</span><input readonly type="text" name="selectedScoring" id="selectedScoring" size="5" value=""> | |||
</div> | |||
<div class="ui-button" id="selectedMinSize-container"> | |||
<span>Size:</span><input readonly type="text" name="selectedMinSize" size="3" id="selectedMinSize" value="5"><span> to </span><input readonly type="text" name="selectedMaxSize" size="3" id="selectedMaxSize" value="20"> | |||
</div><br> | |||
<div class="ui-button" id="selectedImprint-container"> | |||
<span>Imprint:</span><input readonly type="text" name="selectedImprint" id="selectedImprint" value=""> | |||
</div> | |||
<div class="ui-button" id="selectedNDC-container"> | |||
<span>NDC:</span><input readonly type="text" name="selectedNDC" id="selectedNDC" value=""> | |||
</div> | |||
<div class="ui-button" id="selectedIngred-container"> | |||
<span>Ingredients:</span><input readonly type="text" name="selectedIngred" id="selectedIngred" value=""> | |||
</div> | |||
</form> | |||
</div> | |||
<div id="queryContainer"> | <div id="queryContainer"> | ||
<div id="queryContainer_Shape" class="propertyContainerActive"> | <div id="queryContainer_Shape" class="propertyContainerActive" data-order="1"> | ||
<span class="propertyContainer_Title">SHAPE</span> | <span class="propertyContainer_Title">SHAPE</span> | ||
<div id="pillShapeContainer" class="propertyContainer" data-val="Shape"> | <div id="pillShapeContainer" class="propertyContainer" data-val="Shape"> | ||
Line 296: | Line 641: | ||
</div> | </div> | ||
</div> | </div> | ||
<div id="queryContainer_Color" class=" | <div id="queryContainer_Color" class="propertyContainerInactive" data-order="2"> | ||
<span class="propertyContainer_Title">COLOR</span> | <span class="propertyContainer_Title">COLOR</span> | ||
<div id="pillColorContainer" class="propertyContainer"> | <div id="pillColorContainer" class="propertyContainer"> | ||
Line 316: | Line 661: | ||
</div> | </div> | ||
</div> | </div> | ||
<div id="queryContainer_Scoring" class=" | <div id="queryContainer_Scoring" class="propertyContainerInactive" data-order="3"> | ||
<span class="propertyContainer_Title">SCORING</span> | <span class="propertyContainer_Title">SCORING</span> | ||
<div id="pillScoreContainer" class = "propertyContainer"> | <div id="pillScoreContainer" class = "propertyContainer"> | ||
Line 329: | Line 674: | ||
</div> | </div> | ||
</div> | </div> | ||
<div id="queryContainer_Size" class=" | <div id="queryContainer_Size" class="propertyContainerInactive" data-order="4"> | ||
<span class="propertyContainer_Title">SIZE</span> | <span class="propertyContainer_Title">SIZE</span> | ||
<div id="pillSizeContainer" class="propertyContainer"> | <div id="pillSizeContainer" class="propertyContainer"> | ||
Line 352: | Line 697: | ||
</div> | </div> | ||
</div> | </div> | ||
<div id = "misc" class=" | <div id = "misc" class="propertyContainerInactive" data-order="5"> | ||
<form name="selectMisc"> | <form name="selectMisc"> | ||
<div class="pillMiscContainer" id="queryContainer-Imprint" data-prop="selectedImprint" data-inputName="pillImprint"> | <div class="pillMiscContainer" id="queryContainer-Imprint" data-prop="selectedImprint" data-inputName="pillImprint"> | ||
Line 378: | Line 723: | ||
</div> | </div> | ||
</div> | </div> | ||
<div id="pillIDNav"> | <div id="pillIDNav"> | ||
<div id="submit"> | <div id="reset"> | ||
<img src="http://static.wikidoc.org/a/a9/Pid_resetbutton.png" alt="reset"> | |||
</div> | |||
<div id="back" class="navTool" data-direction="back" style="visibility:hidden"> | |||
<img src="http://static.wikidoc.org/8/83/Pid_backbutton.png" alt="back"> | |||
</div> | |||
<div id="next" class="navTool" data-direction="next" style="visibility:visible"> | |||
<img src="http://static.wikidoc.org/8/8a/Pid_nextbutton.png" alt="next"> | |||
</div> | |||
<div id="submit"> | |||
<img src="http://static.wikidoc.org/6/6c/Pid_submitbutton.png" alt="Submit"> | <img src="http://static.wikidoc.org/6/6c/Pid_submitbutton.png" alt="Submit"> | ||
</div> | </div> | ||
Line 397: | Line 740: | ||
</div> | </div> | ||
<div id="resultsTable-container" style="visibility:collapse;"> | <div id="resultsTable-container" style="visibility:collapse;"> | ||
</div> | </div> | ||
</includeonly> | </includeonly> |