fhirsmith 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (277) hide show
  1. package/CHANGELOG.md +42 -0
  2. package/FHIRsmith.png +0 -0
  3. package/README.md +277 -0
  4. package/config-template.json +144 -0
  5. package/library/folder-setup.js +58 -0
  6. package/library/html-server.js +166 -0
  7. package/library/html.js +835 -0
  8. package/library/i18nsupport.js +259 -0
  9. package/library/languages.js +779 -0
  10. package/library/logger-telnet.js +205 -0
  11. package/library/logger.js +279 -0
  12. package/library/package-manager.js +876 -0
  13. package/library/utilities.js +196 -0
  14. package/library/version-utilities.js +1056 -0
  15. package/npmprojector/config-example.json +13 -0
  16. package/npmprojector/indexer.js +394 -0
  17. package/npmprojector/npmprojector.js +395 -0
  18. package/npmprojector/readme.md +174 -0
  19. package/npmprojector/watcher.js +335 -0
  20. package/package.json +119 -0
  21. package/packages/package-crawler.js +846 -0
  22. package/packages/packages-template.html +126 -0
  23. package/packages/packages.js +2838 -0
  24. package/passwords.ini +2 -0
  25. package/publisher/publisher-template.html +208 -0
  26. package/publisher/publisher.js +2167 -0
  27. package/publisher/task-draft.js +458 -0
  28. package/registry/api.js +735 -0
  29. package/registry/crawler.js +637 -0
  30. package/registry/model.js +513 -0
  31. package/registry/readme.md +243 -0
  32. package/registry/registry-data.json +121015 -0
  33. package/registry/registry-template.html +126 -0
  34. package/registry/registry.js +1395 -0
  35. package/registry/test-runner.js +237 -0
  36. package/root-template.html +124 -0
  37. package/server.js +524 -0
  38. package/shl/private-key.pem +5 -0
  39. package/shl/public-key.pem +18 -0
  40. package/shl/shl.js +1125 -0
  41. package/shl/vhl.js +69 -0
  42. package/static/FHIRsmith128.png +0 -0
  43. package/static/FHIRsmith16.png +0 -0
  44. package/static/FHIRsmith32.png +0 -0
  45. package/static/FHIRsmith64.png +0 -0
  46. package/static/assets/css/bootstrap-fhir.css +5302 -0
  47. package/static/assets/css/bootstrap-glyphicons.css +2 -0
  48. package/static/assets/css/bootstrap.css +4097 -0
  49. package/static/assets/css/jquery-ui.css +523 -0
  50. package/static/assets/css/jquery-ui.structure.css +863 -0
  51. package/static/assets/css/jquery-ui.structure.min.css +5 -0
  52. package/static/assets/css/jquery-ui.theme.css +439 -0
  53. package/static/assets/css/jquery-ui.theme.min.css +5 -0
  54. package/static/assets/css/jquery.ui.all.css +7 -0
  55. package/static/assets/css/modules.css +18 -0
  56. package/static/assets/css/project.css +367 -0
  57. package/static/assets/css/pygments-manni.css +66 -0
  58. package/static/assets/css/tags.css +74 -0
  59. package/static/assets/css/xml.css +2 -0
  60. package/static/assets/fonts/glyphiconshalflings-regular.eot +0 -0
  61. package/static/assets/fonts/glyphiconshalflings-regular.otf +0 -0
  62. package/static/assets/fonts/glyphiconshalflings-regular.svg +175 -0
  63. package/static/assets/fonts/glyphiconshalflings-regular.ttf +0 -0
  64. package/static/assets/fonts/glyphiconshalflings-regular.woff +0 -0
  65. package/static/assets/ico/apple-touch-icon-114-precomposed.png +0 -0
  66. package/static/assets/ico/apple-touch-icon-144-precomposed.png +0 -0
  67. package/static/assets/ico/apple-touch-icon-57-precomposed.png +0 -0
  68. package/static/assets/ico/apple-touch-icon-72-precomposed.png +0 -0
  69. package/static/assets/ico/favicon.ico +0 -0
  70. package/static/assets/ico/favicon.png +0 -0
  71. package/static/assets/images/fhir-logo-www.png +0 -0
  72. package/static/assets/images/fhir-logo.png +0 -0
  73. package/static/assets/images/hl7-logo.png +0 -0
  74. package/static/assets/images/logo_ansinew.jpg +0 -0
  75. package/static/assets/images/search.png +0 -0
  76. package/static/assets/images/stripe.png +0 -0
  77. package/static/assets/images/target.png +0 -0
  78. package/static/assets/images/tx-registry-root.gif +0 -0
  79. package/static/assets/images/tx-registry.png +0 -0
  80. package/static/assets/images/tx-server.png +0 -0
  81. package/static/assets/images/tx-version.png +0 -0
  82. package/static/assets/js/bootstrap.min.js +6 -0
  83. package/static/assets/js/fhir-gw.js +259 -0
  84. package/static/assets/js/fhir.js +2 -0
  85. package/static/assets/js/html5shiv.js +8 -0
  86. package/static/assets/js/jcookie.js +96 -0
  87. package/static/assets/js/jquery-ui.min.js +6 -0
  88. package/static/assets/js/jquery.js +10716 -0
  89. package/static/assets/js/jquery.min.js +2 -0
  90. package/static/assets/js/jquery.ui.core.js +314 -0
  91. package/static/assets/js/jquery.ui.draggable.js +825 -0
  92. package/static/assets/js/jquery.ui.mouse.js +162 -0
  93. package/static/assets/js/jquery.ui.resizable.js +842 -0
  94. package/static/assets/js/jquery.ui.widget.js +268 -0
  95. package/static/assets/js/json2.js +487 -0
  96. package/static/assets/js/jtip.js +97 -0
  97. package/static/assets/js/respond.min.js +6 -0
  98. package/static/assets/js/statuspage.js +70 -0
  99. package/static/assets/js/xml.js +2 -0
  100. package/static/dist/js/bootstrap.js +1964 -0
  101. package/static/favicon.png +0 -0
  102. package/static/fhir.css +626 -0
  103. package/static/icon-fhir-16.png +0 -0
  104. package/static/images/ui-bg_diagonals-thick_18_b81900_40x40.png +0 -0
  105. package/static/images/ui-bg_diagonals-thick_20_666666_40x40.png +0 -0
  106. package/static/images/ui-bg_flat_10_000000_40x100.png +0 -0
  107. package/static/images/ui-bg_glass_100_f6f6f6_1x400.png +0 -0
  108. package/static/images/ui-bg_glass_100_fdf5ce_1x400.png +0 -0
  109. package/static/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
  110. package/static/images/ui-bg_gloss-wave_35_f6a828_500x100.png +0 -0
  111. package/static/images/ui-bg_highlight-soft_100_eeeeee_1x100.png +0 -0
  112. package/static/images/ui-bg_highlight-soft_75_ffe45c_1x100.png +0 -0
  113. package/static/images/ui-icons_222222_256x240.png +0 -0
  114. package/static/images/ui-icons_228ef1_256x240.png +0 -0
  115. package/static/images/ui-icons_ef8c08_256x240.png +0 -0
  116. package/static/images/ui-icons_ffd27a_256x240.png +0 -0
  117. package/static/images/ui-icons_ffffff_256x240.png +0 -0
  118. package/static/js/jquery.effects.blind.js +49 -0
  119. package/static/js/jquery.effects.bounce.js +78 -0
  120. package/static/js/jquery.effects.clip.js +54 -0
  121. package/static/js/jquery.effects.core.js +763 -0
  122. package/static/js/jquery.effects.drop.js +50 -0
  123. package/static/js/jquery.effects.explode.js +79 -0
  124. package/static/js/jquery.effects.fade.js +32 -0
  125. package/static/js/jquery.effects.fold.js +56 -0
  126. package/static/js/jquery.effects.highlight.js +50 -0
  127. package/static/js/jquery.effects.pulsate.js +51 -0
  128. package/static/js/jquery.effects.scale.js +178 -0
  129. package/static/js/jquery.effects.shake.js +57 -0
  130. package/static/js/jquery.effects.slide.js +50 -0
  131. package/static/js/jquery.effects.transfer.js +45 -0
  132. package/static/js/jquery.ui.accordion.js +611 -0
  133. package/static/js/jquery.ui.autocomplete.js +612 -0
  134. package/static/js/jquery.ui.button.js +416 -0
  135. package/static/js/jquery.ui.datepicker.js +1823 -0
  136. package/static/js/jquery.ui.dialog.js +878 -0
  137. package/static/js/jquery.ui.droppable.js +296 -0
  138. package/static/js/jquery.ui.position.js +252 -0
  139. package/static/js/jquery.ui.progressbar.js +109 -0
  140. package/static/js/jquery.ui.selectable.js +266 -0
  141. package/static/js/jquery.ui.slider.js +666 -0
  142. package/static/js/jquery.ui.sortable.js +1077 -0
  143. package/static/js/jquery.ui.tabs.js +758 -0
  144. package/stats.js +80 -0
  145. package/test-cache/vsac/vsac-valuesets.db +0 -0
  146. package/token/nginx_passport_setup.md +383 -0
  147. package/token/security_guide.md +294 -0
  148. package/token/token-template.html +330 -0
  149. package/token/token.js +1300 -0
  150. package/translations/Messages.properties +1510 -0
  151. package/translations/Messages_ar.properties +1399 -0
  152. package/translations/Messages_de.properties +836 -0
  153. package/translations/Messages_es.properties +737 -0
  154. package/translations/Messages_fr.properties +1 -0
  155. package/translations/Messages_ja.properties +893 -0
  156. package/translations/Messages_nl.properties +1357 -0
  157. package/translations/Messages_pt.properties +1302 -0
  158. package/translations/Messages_ru.properties +1 -0
  159. package/translations/Messages_uz.properties +1 -0
  160. package/translations/Messages_zh.properties +1 -0
  161. package/translations/rendering-phrases.properties +1128 -0
  162. package/translations/rendering-phrases_ar.properties +1091 -0
  163. package/translations/rendering-phrases_de.properties +6 -0
  164. package/translations/rendering-phrases_es.properties +6 -0
  165. package/translations/rendering-phrases_fr.properties +624 -0
  166. package/translations/rendering-phrases_ja.properties +21 -0
  167. package/translations/rendering-phrases_nl.properties +970 -0
  168. package/translations/rendering-phrases_pt.properties +1020 -0
  169. package/translations/rendering-phrases_ru.properties +1094 -0
  170. package/translations/rendering-phrases_uz.properties +1 -0
  171. package/translations/rendering-phrases_zh.properties +1 -0
  172. package/tx/README.md +418 -0
  173. package/tx/cm/cm-api.js +110 -0
  174. package/tx/cm/cm-database.js +735 -0
  175. package/tx/cm/cm-package.js +325 -0
  176. package/tx/cs/cs-api.js +789 -0
  177. package/tx/cs/cs-areacode.js +615 -0
  178. package/tx/cs/cs-country.js +1110 -0
  179. package/tx/cs/cs-cpt.js +785 -0
  180. package/tx/cs/cs-cs.js +1579 -0
  181. package/tx/cs/cs-currency.js +539 -0
  182. package/tx/cs/cs-db.js +1321 -0
  183. package/tx/cs/cs-hgvs.js +329 -0
  184. package/tx/cs/cs-lang.js +465 -0
  185. package/tx/cs/cs-loinc.js +1485 -0
  186. package/tx/cs/cs-mimetypes.js +238 -0
  187. package/tx/cs/cs-ndc.js +704 -0
  188. package/tx/cs/cs-omop.js +1025 -0
  189. package/tx/cs/cs-provider-api.js +43 -0
  190. package/tx/cs/cs-provider-list.js +37 -0
  191. package/tx/cs/cs-rxnorm.js +808 -0
  192. package/tx/cs/cs-snomed.js +1102 -0
  193. package/tx/cs/cs-ucum.js +514 -0
  194. package/tx/cs/cs-unii.js +271 -0
  195. package/tx/cs/cs-uri.js +218 -0
  196. package/tx/cs/cs-usstates.js +305 -0
  197. package/tx/dev.fhir.org.yml +14 -0
  198. package/tx/fixtures/test-cases-setup.json +18 -0
  199. package/tx/fixtures/test-cases.yml +16 -0
  200. package/tx/html/codesystem-operations.liquid +25 -0
  201. package/tx/html/home-metrics.liquid +247 -0
  202. package/tx/html/operations-form.liquid +148 -0
  203. package/tx/html/search-form.liquid +62 -0
  204. package/tx/html/tx-template.html +133 -0
  205. package/tx/html/valueset-operations.liquid +54 -0
  206. package/tx/importers/atc-to-fhir.js +316 -0
  207. package/tx/importers/import-loinc.module.js +1536 -0
  208. package/tx/importers/import-ndc.module.js +1088 -0
  209. package/tx/importers/import-rxnorm.module.js +898 -0
  210. package/tx/importers/import-sct.module.js +2457 -0
  211. package/tx/importers/import-unii.module.js +601 -0
  212. package/tx/importers/readme.md +453 -0
  213. package/tx/importers/subset-loinc.module.js +1081 -0
  214. package/tx/importers/subset-rxnorm.module.js +938 -0
  215. package/tx/importers/tx-import-base.js +351 -0
  216. package/tx/importers/tx-import-settings.js +310 -0
  217. package/tx/importers/tx-import.js +357 -0
  218. package/tx/library/canonical-resource.js +88 -0
  219. package/tx/library/capabilitystatement.js +292 -0
  220. package/tx/library/codesystem.js +774 -0
  221. package/tx/library/conceptmap.js +568 -0
  222. package/tx/library/designations.js +932 -0
  223. package/tx/library/errors.js +77 -0
  224. package/tx/library/extensions.js +117 -0
  225. package/tx/library/namingsystem.js +322 -0
  226. package/tx/library/operation-outcome.js +127 -0
  227. package/tx/library/parameters.js +105 -0
  228. package/tx/library/renderer.js +1559 -0
  229. package/tx/library/terminologycapabilities.js +418 -0
  230. package/tx/library/ucum-parsers.js +1029 -0
  231. package/tx/library/ucum-service.js +370 -0
  232. package/tx/library/ucum-types.js +1099 -0
  233. package/tx/library/valueset.js +543 -0
  234. package/tx/library.js +676 -0
  235. package/tx/ocl/cm-ocl.js +106 -0
  236. package/tx/ocl/cs-ocl.js +39 -0
  237. package/tx/ocl/vs-ocl.js +105 -0
  238. package/tx/operation-context.js +568 -0
  239. package/tx/params.js +613 -0
  240. package/tx/provider.js +403 -0
  241. package/tx/sct/ecl.js +1560 -0
  242. package/tx/sct/expressions.js +2077 -0
  243. package/tx/sct/structures.js +1396 -0
  244. package/tx/tx-html.js +1063 -0
  245. package/tx/tx.fhir.org.yml +39 -0
  246. package/tx/tx.js +927 -0
  247. package/tx/vs/vs-api.js +112 -0
  248. package/tx/vs/vs-database.js +786 -0
  249. package/tx/vs/vs-package.js +358 -0
  250. package/tx/vs/vs-vsac.js +366 -0
  251. package/tx/workers/batch-validate.js +129 -0
  252. package/tx/workers/batch.js +361 -0
  253. package/tx/workers/closure.js +32 -0
  254. package/tx/workers/expand.js +1845 -0
  255. package/tx/workers/lookup.js +407 -0
  256. package/tx/workers/metadata.js +467 -0
  257. package/tx/workers/operations.js +34 -0
  258. package/tx/workers/read.js +164 -0
  259. package/tx/workers/search.js +384 -0
  260. package/tx/workers/subsumes.js +334 -0
  261. package/tx/workers/translate.js +492 -0
  262. package/tx/workers/validate.js +2504 -0
  263. package/tx/workers/worker.js +904 -0
  264. package/tx/xml/capabilitystatement-xml.js +63 -0
  265. package/tx/xml/codesystem-xml.js +62 -0
  266. package/tx/xml/conceptmap-xml.js +65 -0
  267. package/tx/xml/namingsystem-xml.js +65 -0
  268. package/tx/xml/operationoutcome-xml.js +127 -0
  269. package/tx/xml/parameters-xml.js +312 -0
  270. package/tx/xml/terminologycapabilities-xml.js +64 -0
  271. package/tx/xml/valueset-xml.js +64 -0
  272. package/tx/xml/xml-base.js +603 -0
  273. package/vcl/vcl-parser.js +1098 -0
  274. package/vcl/vcl.js +253 -0
  275. package/windows-install.js +19 -0
  276. package/xig/xig-template.html +124 -0
  277. package/xig/xig.js +3049 -0
@@ -0,0 +1,416 @@
1
+ /*
2
+ * jQuery UI Button 1.8.16
3
+ *
4
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
5
+ * Dual licensed under the MIT or GPL Version 2 licenses.
6
+ * http://jquery.org/license
7
+ *
8
+ * http://docs.jquery.com/UI/Button
9
+ *
10
+ * Depends:
11
+ * jquery.ui.core.js
12
+ * jquery.ui.widget.js
13
+ */
14
+ (function( $, undefined ) {
15
+
16
+ var lastActive, startXPos, startYPos, clickDragged,
17
+ baseClasses = "ui-button ui-widget ui-state-default ui-corner-all",
18
+ stateClasses = "ui-state-hover ui-state-active ",
19
+ typeClasses = "ui-button-icons-only ui-button-icon-only ui-button-text-icons ui-button-text-icon-primary ui-button-text-icon-secondary ui-button-text-only",
20
+ formResetHandler = function() {
21
+ var buttons = $( this ).find( ":ui-button" );
22
+ setTimeout(function() {
23
+ buttons.button( "refresh" );
24
+ }, 1 );
25
+ },
26
+ radioGroup = function( radio ) {
27
+ var name = radio.name,
28
+ form = radio.form,
29
+ radios = $( [] );
30
+ if ( name ) {
31
+ if ( form ) {
32
+ radios = $( form ).find( "[name='" + name + "']" );
33
+ } else {
34
+ radios = $( "[name='" + name + "']", radio.ownerDocument )
35
+ .filter(function() {
36
+ return !this.form;
37
+ });
38
+ }
39
+ }
40
+ return radios;
41
+ };
42
+
43
+ $.widget( "ui.button", {
44
+ options: {
45
+ disabled: null,
46
+ text: true,
47
+ label: null,
48
+ icons: {
49
+ primary: null,
50
+ secondary: null
51
+ }
52
+ },
53
+ _create: function() {
54
+ this.element.closest( "form" )
55
+ .unbind( "reset.button" )
56
+ .bind( "reset.button", formResetHandler );
57
+
58
+ if ( typeof this.options.disabled !== "boolean" ) {
59
+ this.options.disabled = this.element.propAttr( "disabled" );
60
+ }
61
+
62
+ this._determineButtonType();
63
+ this.hasTitle = !!this.buttonElement.attr( "title" );
64
+
65
+ var self = this,
66
+ options = this.options,
67
+ toggleButton = this.type === "checkbox" || this.type === "radio",
68
+ hoverClass = "ui-state-hover" + ( !toggleButton ? " ui-state-active" : "" ),
69
+ focusClass = "ui-state-focus";
70
+
71
+ if ( options.label === null ) {
72
+ options.label = this.buttonElement.html();
73
+ }
74
+
75
+ if ( this.element.is( ":disabled" ) ) {
76
+ options.disabled = true;
77
+ }
78
+
79
+ this.buttonElement
80
+ .addClass( baseClasses )
81
+ .attr( "role", "button" )
82
+ .bind( "mouseenter.button", function() {
83
+ if ( options.disabled ) {
84
+ return;
85
+ }
86
+ $( this ).addClass( "ui-state-hover" );
87
+ if ( this === lastActive ) {
88
+ $( this ).addClass( "ui-state-active" );
89
+ }
90
+ })
91
+ .bind( "mouseleave.button", function() {
92
+ if ( options.disabled ) {
93
+ return;
94
+ }
95
+ $( this ).removeClass( hoverClass );
96
+ })
97
+ .bind( "click.button", function( event ) {
98
+ if ( options.disabled ) {
99
+ event.preventDefault();
100
+ event.stopImmediatePropagation();
101
+ }
102
+ });
103
+
104
+ this.element
105
+ .bind( "focus.button", function() {
106
+ // no need to check disabled, focus won't be triggered anyway
107
+ self.buttonElement.addClass( focusClass );
108
+ })
109
+ .bind( "blur.button", function() {
110
+ self.buttonElement.removeClass( focusClass );
111
+ });
112
+
113
+ if ( toggleButton ) {
114
+ this.element.bind( "change.button", function() {
115
+ if ( clickDragged ) {
116
+ return;
117
+ }
118
+ self.refresh();
119
+ });
120
+ // if mouse moves between mousedown and mouseup (drag) set clickDragged flag
121
+ // prevents issue where button state changes but checkbox/radio checked state
122
+ // does not in Firefox (see ticket #6970)
123
+ this.buttonElement
124
+ .bind( "mousedown.button", function( event ) {
125
+ if ( options.disabled ) {
126
+ return;
127
+ }
128
+ clickDragged = false;
129
+ startXPos = event.pageX;
130
+ startYPos = event.pageY;
131
+ })
132
+ .bind( "mouseup.button", function( event ) {
133
+ if ( options.disabled ) {
134
+ return;
135
+ }
136
+ if ( startXPos !== event.pageX || startYPos !== event.pageY ) {
137
+ clickDragged = true;
138
+ }
139
+ });
140
+ }
141
+
142
+ if ( this.type === "checkbox" ) {
143
+ this.buttonElement.bind( "click.button", function() {
144
+ if ( options.disabled || clickDragged ) {
145
+ return false;
146
+ }
147
+ $( this ).toggleClass( "ui-state-active" );
148
+ self.buttonElement.attr( "aria-pressed", self.element[0].checked );
149
+ });
150
+ } else if ( this.type === "radio" ) {
151
+ this.buttonElement.bind( "click.button", function() {
152
+ if ( options.disabled || clickDragged ) {
153
+ return false;
154
+ }
155
+ $( this ).addClass( "ui-state-active" );
156
+ self.buttonElement.attr( "aria-pressed", "true" );
157
+
158
+ var radio = self.element[ 0 ];
159
+ radioGroup( radio )
160
+ .not( radio )
161
+ .map(function() {
162
+ return $( this ).button( "widget" )[ 0 ];
163
+ })
164
+ .removeClass( "ui-state-active" )
165
+ .attr( "aria-pressed", "false" );
166
+ });
167
+ } else {
168
+ this.buttonElement
169
+ .bind( "mousedown.button", function() {
170
+ if ( options.disabled ) {
171
+ return false;
172
+ }
173
+ $( this ).addClass( "ui-state-active" );
174
+ lastActive = this;
175
+ $( document ).one( "mouseup", function() {
176
+ lastActive = null;
177
+ });
178
+ })
179
+ .bind( "mouseup.button", function() {
180
+ if ( options.disabled ) {
181
+ return false;
182
+ }
183
+ $( this ).removeClass( "ui-state-active" );
184
+ })
185
+ .bind( "keydown.button", function(event) {
186
+ if ( options.disabled ) {
187
+ return false;
188
+ }
189
+ if ( event.keyCode == $.ui.keyCode.SPACE || event.keyCode == $.ui.keyCode.ENTER ) {
190
+ $( this ).addClass( "ui-state-active" );
191
+ }
192
+ })
193
+ .bind( "keyup.button", function() {
194
+ $( this ).removeClass( "ui-state-active" );
195
+ });
196
+
197
+ if ( this.buttonElement.is("a") ) {
198
+ this.buttonElement.keyup(function(event) {
199
+ if ( event.keyCode === $.ui.keyCode.SPACE ) {
200
+ // TODO pass through original event correctly (just as 2nd argument doesn't work)
201
+ $( this ).click();
202
+ }
203
+ });
204
+ }
205
+ }
206
+
207
+ // TODO: pull out $.Widget's handling for the disabled option into
208
+ // $.Widget.prototype._setOptionDisabled so it's easy to proxy and can
209
+ // be overridden by individual plugins
210
+ this._setOption( "disabled", options.disabled );
211
+ this._resetButton();
212
+ },
213
+
214
+ _determineButtonType: function() {
215
+
216
+ if ( this.element.is(":checkbox") ) {
217
+ this.type = "checkbox";
218
+ } else if ( this.element.is(":radio") ) {
219
+ this.type = "radio";
220
+ } else if ( this.element.is("input") ) {
221
+ this.type = "input";
222
+ } else {
223
+ this.type = "button";
224
+ }
225
+
226
+ if ( this.type === "checkbox" || this.type === "radio" ) {
227
+ // we don't search against the document in case the element
228
+ // is disconnected from the DOM
229
+ var ancestor = this.element.parents().filter(":last"),
230
+ labelSelector = "label[for='" + this.element.attr("id") + "']";
231
+ this.buttonElement = ancestor.find( labelSelector );
232
+ if ( !this.buttonElement.length ) {
233
+ ancestor = ancestor.length ? ancestor.siblings() : this.element.siblings();
234
+ this.buttonElement = ancestor.filter( labelSelector );
235
+ if ( !this.buttonElement.length ) {
236
+ this.buttonElement = ancestor.find( labelSelector );
237
+ }
238
+ }
239
+ this.element.addClass( "ui-helper-hidden-accessible" );
240
+
241
+ var checked = this.element.is( ":checked" );
242
+ if ( checked ) {
243
+ this.buttonElement.addClass( "ui-state-active" );
244
+ }
245
+ this.buttonElement.attr( "aria-pressed", checked );
246
+ } else {
247
+ this.buttonElement = this.element;
248
+ }
249
+ },
250
+
251
+ widget: function() {
252
+ return this.buttonElement;
253
+ },
254
+
255
+ destroy: function() {
256
+ this.element
257
+ .removeClass( "ui-helper-hidden-accessible" );
258
+ this.buttonElement
259
+ .removeClass( baseClasses + " " + stateClasses + " " + typeClasses )
260
+ .removeAttr( "role" )
261
+ .removeAttr( "aria-pressed" )
262
+ .html( this.buttonElement.find(".ui-button-text").html() );
263
+
264
+ if ( !this.hasTitle ) {
265
+ this.buttonElement.removeAttr( "title" );
266
+ }
267
+
268
+ $.Widget.prototype.destroy.call( this );
269
+ },
270
+
271
+ _setOption: function( key, value ) {
272
+ $.Widget.prototype._setOption.apply( this, arguments );
273
+ if ( key === "disabled" ) {
274
+ if ( value ) {
275
+ this.element.propAttr( "disabled", true );
276
+ } else {
277
+ this.element.propAttr( "disabled", false );
278
+ }
279
+ return;
280
+ }
281
+ this._resetButton();
282
+ },
283
+
284
+ refresh: function() {
285
+ var isDisabled = this.element.is( ":disabled" );
286
+ if ( isDisabled !== this.options.disabled ) {
287
+ this._setOption( "disabled", isDisabled );
288
+ }
289
+ if ( this.type === "radio" ) {
290
+ radioGroup( this.element[0] ).each(function() {
291
+ if ( $( this ).is( ":checked" ) ) {
292
+ $( this ).button( "widget" )
293
+ .addClass( "ui-state-active" )
294
+ .attr( "aria-pressed", "true" );
295
+ } else {
296
+ $( this ).button( "widget" )
297
+ .removeClass( "ui-state-active" )
298
+ .attr( "aria-pressed", "false" );
299
+ }
300
+ });
301
+ } else if ( this.type === "checkbox" ) {
302
+ if ( this.element.is( ":checked" ) ) {
303
+ this.buttonElement
304
+ .addClass( "ui-state-active" )
305
+ .attr( "aria-pressed", "true" );
306
+ } else {
307
+ this.buttonElement
308
+ .removeClass( "ui-state-active" )
309
+ .attr( "aria-pressed", "false" );
310
+ }
311
+ }
312
+ },
313
+
314
+ _resetButton: function() {
315
+ if ( this.type === "input" ) {
316
+ if ( this.options.label ) {
317
+ this.element.val( this.options.label );
318
+ }
319
+ return;
320
+ }
321
+ var buttonElement = this.buttonElement.removeClass( typeClasses ),
322
+ buttonText = $( "<span></span>" )
323
+ .addClass( "ui-button-text" )
324
+ .html( this.options.label )
325
+ .appendTo( buttonElement.empty() )
326
+ .text(),
327
+ icons = this.options.icons,
328
+ multipleIcons = icons.primary && icons.secondary,
329
+ buttonClasses = [];
330
+
331
+ if ( icons.primary || icons.secondary ) {
332
+ if ( this.options.text ) {
333
+ buttonClasses.push( "ui-button-text-icon" + ( multipleIcons ? "s" : ( icons.primary ? "-primary" : "-secondary" ) ) );
334
+ }
335
+
336
+ if ( icons.primary ) {
337
+ buttonElement.prepend( "<span class='ui-button-icon-primary ui-icon " + icons.primary + "'></span>" );
338
+ }
339
+
340
+ if ( icons.secondary ) {
341
+ buttonElement.append( "<span class='ui-button-icon-secondary ui-icon " + icons.secondary + "'></span>" );
342
+ }
343
+
344
+ if ( !this.options.text ) {
345
+ buttonClasses.push( multipleIcons ? "ui-button-icons-only" : "ui-button-icon-only" );
346
+
347
+ if ( !this.hasTitle ) {
348
+ buttonElement.attr( "title", buttonText );
349
+ }
350
+ }
351
+ } else {
352
+ buttonClasses.push( "ui-button-text-only" );
353
+ }
354
+ buttonElement.addClass( buttonClasses.join( " " ) );
355
+ }
356
+ });
357
+
358
+ $.widget( "ui.buttonset", {
359
+ options: {
360
+ items: ":button, :submit, :reset, :checkbox, :radio, a, :data(button)"
361
+ },
362
+
363
+ _create: function() {
364
+ this.element.addClass( "ui-buttonset" );
365
+ },
366
+
367
+ _init: function() {
368
+ this.refresh();
369
+ },
370
+
371
+ _setOption: function( key, value ) {
372
+ if ( key === "disabled" ) {
373
+ this.buttons.button( "option", key, value );
374
+ }
375
+
376
+ $.Widget.prototype._setOption.apply( this, arguments );
377
+ },
378
+
379
+ refresh: function() {
380
+ var ltr = this.element.css( "direction" ) === "ltr";
381
+
382
+ this.buttons = this.element.find( this.options.items )
383
+ .filter( ":ui-button" )
384
+ .button( "refresh" )
385
+ .end()
386
+ .not( ":ui-button" )
387
+ .button()
388
+ .end()
389
+ .map(function() {
390
+ return $( this ).button( "widget" )[ 0 ];
391
+ })
392
+ .removeClass( "ui-corner-all ui-corner-left ui-corner-right" )
393
+ .filter( ":first" )
394
+ .addClass( ltr ? "ui-corner-left" : "ui-corner-right" )
395
+ .end()
396
+ .filter( ":last" )
397
+ .addClass( ltr ? "ui-corner-right" : "ui-corner-left" )
398
+ .end()
399
+ .end();
400
+ },
401
+
402
+ destroy: function() {
403
+ this.element.removeClass( "ui-buttonset" );
404
+ this.buttons
405
+ .map(function() {
406
+ return $( this ).button( "widget" )[ 0 ];
407
+ })
408
+ .removeClass( "ui-corner-left ui-corner-right" )
409
+ .end()
410
+ .button( "destroy" );
411
+
412
+ $.Widget.prototype.destroy.call( this );
413
+ }
414
+ });
415
+
416
+ }( jQuery ) );