├── .gitignore ├── LICENSE ├── README.md ├── docs ├── events_python.json ├── googlec2cea4d947e8bbdb.html ├── index.html ├── js │ ├── exhibit-api.js │ ├── exhibit-scripted-bundle.js │ ├── extensions │ │ ├── invalid-json │ │ │ └── invalid-json-extension.js │ │ ├── map │ │ │ ├── locales │ │ │ │ ├── de │ │ │ │ │ └── locale.js │ │ │ │ ├── en │ │ │ │ │ └── locale.js │ │ │ │ ├── es │ │ │ │ │ └── locale.js │ │ │ │ ├── fr │ │ │ │ │ └── locale.js │ │ │ │ ├── nl │ │ │ │ │ └── locale.js │ │ │ │ └── sv │ │ │ │ │ └── locale.js │ │ │ ├── map-extension-bundle.js │ │ │ ├── map-extension.js │ │ │ ├── scripts │ │ │ │ ├── canvas.js │ │ │ │ ├── google-maps-v2-view.js │ │ │ │ ├── map-view.js │ │ │ │ ├── marker.js │ │ │ │ └── painter.js │ │ │ └── styles │ │ │ │ ├── map-extension-bundle.css │ │ │ │ └── map-view.css │ │ └── time │ │ │ ├── load-simile-ajax.js │ │ │ ├── locales │ │ │ ├── de │ │ │ │ └── locale.js │ │ │ ├── en │ │ │ │ └── locale.js │ │ │ ├── es │ │ │ │ └── locale.js │ │ │ ├── fr │ │ │ │ └── locale.js │ │ │ ├── nl │ │ │ │ └── locale.js │ │ │ └── sv │ │ │ │ └── locale.js │ │ │ ├── scripts │ │ │ └── timeline-view.js │ │ │ ├── styles │ │ │ ├── time-extension-bundle.css │ │ │ └── timeline-view.css │ │ │ ├── time-extension-bundle.js │ │ │ └── time-extension.js │ ├── images │ │ ├── arrow-left.gif │ │ ├── arrow-right.gif │ │ ├── black-check-no-border.png │ │ ├── black-check.png │ │ ├── blank-16x16.png │ │ ├── bookmark-icon.png │ │ ├── bubble-arrow-point-down.png │ │ ├── bubble-arrow-point-left.png │ │ ├── bubble-arrow-point-right.png │ │ ├── bubble-arrow-point-up.png │ │ ├── bubble-bottom-left.png │ │ ├── bubble-bottom-right.png │ │ ├── bubble-bottom.png │ │ ├── bubble-left.png │ │ ├── bubble-right.png │ │ ├── bubble-top-left.png │ │ ├── bubble-top-right.png │ │ ├── bubble-top.png │ │ ├── close-button.png │ │ ├── collapse.png │ │ ├── copy.png │ │ ├── day-with-items-bkgrd.gif │ │ ├── down-arrow.png │ │ ├── expand.png │ │ ├── go-next.png │ │ ├── go-previous.png │ │ ├── gray-check-no-border.png │ │ ├── gray-check.png │ │ ├── left-arrow.png │ │ ├── liveclipboard-icon.png │ │ ├── logos │ │ │ ├── exhibit-small-AliceBlue.png │ │ │ ├── exhibit-small-AntiqueWhite.png │ │ │ ├── exhibit-small-Aqua.png │ │ │ ├── exhibit-small-Aquamarine.png │ │ │ ├── exhibit-small-Azure.png │ │ │ ├── exhibit-small-Beige.png │ │ │ ├── exhibit-small-Bisque.png │ │ │ ├── exhibit-small-Black.png │ │ │ ├── exhibit-small-BlanchedAlmond.png │ │ │ ├── exhibit-small-Blue.png │ │ │ ├── exhibit-small-BlueViolet.png │ │ │ ├── exhibit-small-Brown.png │ │ │ ├── exhibit-small-BurlyWood.png │ │ │ ├── exhibit-small-CadetBlue.png │ │ │ ├── exhibit-small-Chartreuse.png │ │ │ ├── exhibit-small-Chocolate.png │ │ │ ├── exhibit-small-Coral.png │ │ │ ├── exhibit-small-CornflowerBlue.png │ │ │ ├── exhibit-small-Cornsilk.png │ │ │ ├── exhibit-small-Crimson.png │ │ │ ├── exhibit-small-Cyan.png │ │ │ ├── exhibit-small-DarkBlue.png │ │ │ ├── exhibit-small-DarkCyan.png │ │ │ ├── exhibit-small-DarkGoldenRod.png │ │ │ ├── exhibit-small-DarkGray.png │ │ │ ├── exhibit-small-DarkGreen.png │ │ │ ├── exhibit-small-DarkGrey.png │ │ │ ├── exhibit-small-DarkKhaki.png │ │ │ ├── exhibit-small-DarkMagenta.png │ │ │ ├── exhibit-small-DarkOliveGreen.png │ │ │ ├── exhibit-small-DarkOrchid.png │ │ │ ├── exhibit-small-DarkRed.png │ │ │ ├── exhibit-small-DarkSalmon.png │ │ │ ├── exhibit-small-DarkSeaGreen.png │ │ │ ├── exhibit-small-DarkSlateBlue.png │ │ │ ├── exhibit-small-DarkSlateGray.png │ │ │ ├── exhibit-small-DarkSlateGrey.png │ │ │ ├── exhibit-small-DarkTurquoise.png │ │ │ ├── exhibit-small-DarkViolet.png │ │ │ ├── exhibit-small-Darkorange.png │ │ │ ├── exhibit-small-DeepPink.png │ │ │ ├── exhibit-small-DeepSkyBlue.png │ │ │ ├── exhibit-small-DimGray.png │ │ │ ├── exhibit-small-DimGrey.png │ │ │ ├── exhibit-small-DodgerBlue.png │ │ │ ├── exhibit-small-FireBrick.png │ │ │ ├── exhibit-small-FloralWhite.png │ │ │ ├── exhibit-small-ForestGreen.png │ │ │ ├── exhibit-small-Fuchsia.png │ │ │ ├── exhibit-small-Gainsboro.png │ │ │ ├── exhibit-small-GhostWhite.png │ │ │ ├── exhibit-small-Gold.png │ │ │ ├── exhibit-small-GoldenRod.png │ │ │ ├── exhibit-small-Gray.png │ │ │ ├── exhibit-small-Green.png │ │ │ ├── exhibit-small-GreenYellow.png │ │ │ ├── exhibit-small-Grey.png │ │ │ ├── exhibit-small-HoneyDew.png │ │ │ ├── exhibit-small-HotPink.png │ │ │ ├── exhibit-small-IndianRed .png │ │ │ ├── exhibit-small-Indigo .png │ │ │ ├── exhibit-small-Ivory.png │ │ │ ├── exhibit-small-Khaki.png │ │ │ ├── exhibit-small-Lavender.png │ │ │ ├── exhibit-small-LavenderBlush.png │ │ │ ├── exhibit-small-LawnGreen.png │ │ │ ├── exhibit-small-LemonChiffon.png │ │ │ ├── exhibit-small-LightBlue.png │ │ │ ├── exhibit-small-LightCoral.png │ │ │ ├── exhibit-small-LightCyan.png │ │ │ ├── exhibit-small-LightGoldenRodYellow.png │ │ │ ├── exhibit-small-LightGray.png │ │ │ ├── exhibit-small-LightGreen.png │ │ │ ├── exhibit-small-LightGrey.png │ │ │ ├── exhibit-small-LightPink.png │ │ │ ├── exhibit-small-LightSalmon.png │ │ │ ├── exhibit-small-LightSeaGreen.png │ │ │ ├── exhibit-small-LightSkyBlue.png │ │ │ ├── exhibit-small-LightSlateGray.png │ │ │ ├── exhibit-small-LightSlateGrey.png │ │ │ ├── exhibit-small-LightSteelBlue.png │ │ │ ├── exhibit-small-LightYellow.png │ │ │ ├── exhibit-small-Lime.png │ │ │ ├── exhibit-small-LimeGreen.png │ │ │ ├── exhibit-small-Linen.png │ │ │ ├── exhibit-small-Magenta.png │ │ │ ├── exhibit-small-Maroon.png │ │ │ ├── exhibit-small-MediumAquaMarine.png │ │ │ ├── exhibit-small-MediumBlue.png │ │ │ ├── exhibit-small-MediumOrchid.png │ │ │ ├── exhibit-small-MediumPurple.png │ │ │ ├── exhibit-small-MediumSeaGreen.png │ │ │ ├── exhibit-small-MediumSlateBlue.png │ │ │ ├── exhibit-small-MediumSpringGreen.png │ │ │ ├── exhibit-small-MediumTurquoise.png │ │ │ ├── exhibit-small-MediumVioletRed.png │ │ │ ├── exhibit-small-MidnightBlue.png │ │ │ ├── exhibit-small-MintCream.png │ │ │ ├── exhibit-small-MistyRose.png │ │ │ ├── exhibit-small-Moccasin.png │ │ │ ├── exhibit-small-NavajoWhite.png │ │ │ ├── exhibit-small-Navy.png │ │ │ ├── exhibit-small-OldLace.png │ │ │ ├── exhibit-small-Olive.png │ │ │ ├── exhibit-small-OliveDrab.png │ │ │ ├── exhibit-small-Orange.png │ │ │ ├── exhibit-small-OrangeRed.png │ │ │ ├── exhibit-small-Orchid.png │ │ │ ├── exhibit-small-PaleGoldenRod.png │ │ │ ├── exhibit-small-PaleGreen.png │ │ │ ├── exhibit-small-PaleTurquoise.png │ │ │ ├── exhibit-small-PaleVioletRed.png │ │ │ ├── exhibit-small-PapayaWhip.png │ │ │ ├── exhibit-small-PeachPuff.png │ │ │ ├── exhibit-small-Peru.png │ │ │ ├── exhibit-small-Pink.png │ │ │ ├── exhibit-small-Plum.png │ │ │ ├── exhibit-small-PowderBlue.png │ │ │ ├── exhibit-small-Purple.png │ │ │ ├── exhibit-small-Red.png │ │ │ ├── exhibit-small-RosyBrown.png │ │ │ ├── exhibit-small-RoyalBlue.png │ │ │ ├── exhibit-small-SaddleBrown.png │ │ │ ├── exhibit-small-Salmon.png │ │ │ ├── exhibit-small-SandyBrown.png │ │ │ ├── exhibit-small-SeaGreen.png │ │ │ ├── exhibit-small-SeaShell.png │ │ │ ├── exhibit-small-Sienna.png │ │ │ ├── exhibit-small-Silver.png │ │ │ ├── exhibit-small-SkyBlue.png │ │ │ ├── exhibit-small-SlateBlue.png │ │ │ ├── exhibit-small-SlateGray.png │ │ │ ├── exhibit-small-SlateGrey.png │ │ │ ├── exhibit-small-Snow.png │ │ │ ├── exhibit-small-SpringGreen.png │ │ │ ├── exhibit-small-SteelBlue.png │ │ │ ├── exhibit-small-Tan.png │ │ │ ├── exhibit-small-Teal.png │ │ │ ├── exhibit-small-Thistle.png │ │ │ ├── exhibit-small-Tomato.png │ │ │ ├── exhibit-small-Turquoise.png │ │ │ ├── exhibit-small-Violet.png │ │ │ ├── exhibit-small-Wheat.png │ │ │ ├── exhibit-small-White.png │ │ │ ├── exhibit-small-WhiteSmoke.png │ │ │ ├── exhibit-small-Yellow.png │ │ │ └── exhibit-small-YellowGreen.png │ │ ├── map-marker-shadow.png │ │ ├── message-bottom-left.png │ │ ├── message-bottom-right.png │ │ ├── message-bubble │ │ │ ├── message-bottom-left.png │ │ │ ├── message-bottom-right.png │ │ │ ├── message-left.png │ │ │ ├── message-right.png │ │ │ ├── message-top-left.png │ │ │ └── message-top-right.png │ │ ├── message-left.png │ │ ├── message-right.png │ │ ├── message-top-left.png │ │ ├── message-top-right.png │ │ ├── month-header-left.gif │ │ ├── month-header-right.gif │ │ ├── no-check-no-border.png │ │ ├── no-check.png │ │ ├── option-check.png │ │ ├── option.png │ │ ├── progress-running.gif │ │ ├── reset-history-icon.png │ │ ├── right-arrow.png │ │ ├── slider-handle.png │ │ ├── slider-handle2.png │ │ ├── up-arrow.png │ │ ├── week-selector-active.gif │ │ └── week-selector.gif │ ├── lib │ │ ├── LAB.min.js │ │ ├── base64.js │ │ ├── es5-shim-2.1.0.js │ │ ├── es5-shim-4.5.9.js │ │ ├── es5-shim.js │ │ ├── jquery-1.11.3.js │ │ ├── jquery-1.11.3.min.js │ │ ├── jquery-1.12.4.js │ │ ├── jquery-1.12.4.min.js │ │ ├── jquery.history.js │ │ ├── jquery.history.shim.js │ │ ├── jquery.js │ │ ├── jquery.min.js │ │ ├── jquery.simile.bubble.js │ │ ├── jquery.simile.dom.js │ │ ├── json2.js │ │ └── sprintf.js │ ├── locales │ │ ├── de │ │ │ └── locale.js │ │ ├── el │ │ │ └── locale.js │ │ ├── en │ │ │ └── locale.js │ │ ├── es │ │ │ └── locale.js │ │ ├── fi │ │ │ └── locale.js │ │ ├── fr │ │ │ └── locale.js │ │ ├── manifest.js │ │ ├── nl │ │ │ └── locale.js │ │ ├── no │ │ │ └── locale.js │ │ ├── pt-BR │ │ │ └── locale.js │ │ └── sv │ │ │ └── locale.js │ ├── scripts │ │ ├── bc │ │ │ ├── attributes.js │ │ │ └── bc.js │ │ ├── data │ │ │ ├── collection.js │ │ │ ├── database.js │ │ │ ├── database │ │ │ │ ├── local.js │ │ │ │ ├── property.js │ │ │ │ ├── range-index.js │ │ │ │ └── type.js │ │ │ ├── exporter.js │ │ │ ├── exporters │ │ │ │ ├── bibtex.js │ │ │ │ ├── html-table.js │ │ │ │ ├── json.js │ │ │ │ ├── rdf-xml.js │ │ │ │ ├── semantic-wikitext.js │ │ │ │ └── tsv.js │ │ │ ├── expression-parser.js │ │ │ ├── expression.js │ │ │ ├── expression │ │ │ │ ├── collection.js │ │ │ │ ├── constant.js │ │ │ │ ├── control-call.js │ │ │ │ ├── controls.js │ │ │ │ ├── function-call.js │ │ │ │ ├── functions.js │ │ │ │ ├── operator.js │ │ │ │ └── path.js │ │ │ ├── importer.js │ │ │ └── importers │ │ │ │ ├── babel-based.js │ │ │ │ ├── google-spreadsheet.js │ │ │ │ ├── html-table.js │ │ │ │ ├── json.js │ │ │ │ ├── jsonp.js │ │ │ │ └── tsv-csv.js │ │ ├── exhibit.js │ │ ├── final.js │ │ ├── registry.js │ │ ├── ui │ │ │ ├── coders │ │ │ │ ├── coder.js │ │ │ │ ├── color-coder.js │ │ │ │ ├── color-gradient-coder.js │ │ │ │ ├── default-color-coder.js │ │ │ │ ├── icon-coder.js │ │ │ │ ├── ordered-color-coder.js │ │ │ │ ├── size-coder.js │ │ │ │ └── size-gradient-coder.js │ │ │ ├── control-panel.js │ │ │ ├── coordinator.js │ │ │ ├── facets │ │ │ │ ├── alpha-range-facet.js │ │ │ │ ├── cloud-facet.js │ │ │ │ ├── date-l10n.js │ │ │ │ ├── dstructs.js │ │ │ │ ├── enumerated-facet.js │ │ │ │ ├── facet.js │ │ │ │ ├── hierarchical-facet.js │ │ │ │ ├── image-facet.js │ │ │ │ ├── list-facet.js │ │ │ │ ├── month-facet.js │ │ │ │ ├── numeric-range-facet.js │ │ │ │ ├── slider-facet.js │ │ │ │ ├── slider.js │ │ │ │ ├── text-search-facet.js │ │ │ │ ├── timegrid-facet.js │ │ │ │ ├── util │ │ │ │ │ ├── date.js │ │ │ │ │ ├── debug.js │ │ │ │ │ ├── dstructs │ │ │ │ │ │ └── dstructs.js │ │ │ │ │ ├── excanvas.pack.js │ │ │ │ │ ├── jquery.corner.js │ │ │ │ │ ├── jquery.dimensions.js │ │ │ │ │ ├── jquery.prettybox.js │ │ │ │ │ ├── jquery.simile.js │ │ │ │ │ └── util.js │ │ │ │ └── week-facet.js │ │ │ ├── format-parser.js │ │ │ ├── formatter.js │ │ │ ├── lens-registry.js │ │ │ ├── lens.js │ │ │ ├── ui-context.js │ │ │ ├── ui.js │ │ │ ├── views │ │ │ │ ├── ordered-view-frame.js │ │ │ │ ├── tabular-view.js │ │ │ │ ├── thumbnail-view.js │ │ │ │ ├── tile-view.js │ │ │ │ ├── view-panel.js │ │ │ │ └── view.js │ │ │ └── widgets │ │ │ │ ├── bookmark-widget.js │ │ │ │ ├── collection-summary-widget.js │ │ │ │ ├── legend-gradient-widget.js │ │ │ │ ├── legend-widget.js │ │ │ │ ├── logo.js │ │ │ │ ├── option-widget.js │ │ │ │ ├── reset-history-widget.js │ │ │ │ ├── resizable-div-widget.js │ │ │ │ └── toolbox-widget.js │ │ └── util │ │ │ ├── bookmark.js │ │ │ ├── coders.js │ │ │ ├── date-time.js │ │ │ ├── debug.js │ │ │ ├── facets.js │ │ │ ├── history.js │ │ │ ├── html.js │ │ │ ├── localization.js │ │ │ ├── persistence.js │ │ │ ├── set.js │ │ │ ├── settings.js │ │ │ ├── units.js │ │ │ ├── util.js │ │ │ └── views.js │ └── styles │ │ ├── browse-panel.css │ │ ├── bubbles.css │ │ ├── control-panel.css │ │ ├── exhibit-scripted-bundle.css │ │ ├── exhibit.css │ │ ├── graphics.css │ │ ├── lens.css │ │ ├── theme-sandy-stone-beach-ocean-diver.css │ │ ├── timegrid.css │ │ ├── util │ │ ├── facets.css │ │ └── views.css │ │ ├── views │ │ ├── tabular-view.css │ │ ├── thumbnail-view.css │ │ ├── tile-view.css │ │ └── view-panel.css │ │ └── widgets │ │ ├── bookmark-widget.css │ │ ├── collection-summary-widget.css │ │ ├── legend-widget.css │ │ ├── option-widget.css │ │ ├── reset-history-widget.css │ │ ├── resizable-div-widget.css │ │ └── toolbox-widget.css ├── mapa.png └── sitemap.xml ├── extract_calendars.py ├── geocache.dat ├── index.templ └── requirements.txt /.gitignore: -------------------------------------------------------------------------------- 1 | *~ 2 | *pyc 3 | env 4 | pycal.p12 5 | *.old 6 | .env 7 | 8 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Python Events 2 | Simile Exhibit with python events 3 | 4 | https://www.python.org/events 5 | -------------------------------------------------------------------------------- /docs/googlec2cea4d947e8bbdb.html: -------------------------------------------------------------------------------- 1 | google-site-verification: googlec2cea4d947e8bbdb.html -------------------------------------------------------------------------------- /docs/js/extensions/invalid-json/invalid-json-extension.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @fileOverview Methods for converting Exhibit 2.2.0 JSON into 3 | * valid JSON 2.0. If the existing Exhibit JSON import fails 4 | * it will offer this as an option via confirmation dialog. This tool 5 | * should not be included under normal operation, only when upgrading 6 | * and your data fails to load. 7 | * @example 8 | * 10 | * @author Ryan Lee 11 | */ 12 | 13 | /** 14 | * @namespace 15 | */ 16 | Exhibit.Extension.InvalidJSON = {}; 17 | 18 | /** 19 | * @param {String} url 20 | */ 21 | Exhibit.Extension.InvalidJSON.process = function(url) { 22 | Exhibit.Extension.InvalidJSON.get( 23 | url, 24 | Exhibit.Extension.InvalidJSON.onSuccess 25 | ); 26 | }; 27 | 28 | /** 29 | * The imprecise method Exhibit 2.2.0 used to process JSON. 30 | * @param {String} json 31 | * @returns {Object} 32 | */ 33 | Exhibit.Extension.InvalidJSON.parseJSON = function(json) { 34 | return eval("(" + json + ")"); 35 | }; 36 | 37 | /** 38 | * @param {String} url 39 | * @param {String} json 40 | * @returns {String} 41 | */ 42 | Exhibit.Extension.InvalidJSON.makeValid = function(url, json) { 43 | try { 44 | return JSON.stringify(Exhibit.Extension.InvalidJSON.parseJSON(json), null, "\t"); 45 | } catch(e) { 46 | Exhibit.jQuery(document).trigger( 47 | "error.exhibit", 48 | [e, "Failed to convert."] 49 | ); 50 | } 51 | }; 52 | 53 | /** 54 | * @param {String} url 55 | * @param {Function} callback 56 | */ 57 | Exhibit.Extension.InvalidJSON.get = function(url, callback) { 58 | Exhibit.jQuery.ajax({ 59 | "url": url, 60 | "dataType": "text", 61 | "success": function(s, t, j) { 62 | callback(url, s, t, j); 63 | } 64 | }); 65 | }; 66 | 67 | /** 68 | * @param {String} url 69 | * @param {String} s 70 | * @param {String} textStatus 71 | * @param {jQuery.XmlHttpRequest} jqxhr 72 | */ 73 | Exhibit.Extension.InvalidJSON.onSuccess = function(url, s, textStatus, jqxhr) { 74 | Exhibit.Extension.InvalidJSON.show( 75 | url, 76 | Exhibit.Extension.InvalidJSON.makeValid(url, s) 77 | ); 78 | }; 79 | 80 | /** 81 | * @param {String} url 82 | * @param {String} json 83 | */ 84 | Exhibit.Extension.InvalidJSON.show = function(url, json) { 85 | var valid = json + "\n// " + url + "\n"; 86 | Exhibit.ToolboxWidget.createExportDialogBox(valid).open(); 87 | }; 88 | 89 | // Initialize 90 | (function loadInvalidJSONExtension() { 91 | setTimeout(function() { 92 | if (typeof jQuery === "undefined") { 93 | loadInvalidJSONExtension(); 94 | } else { 95 | Exhibit.jQuery(document).one("localeLoaded.exhibit", function(evt) { 96 | Exhibit.jQuery('link[rel="exhibit/data"][type="application/json"],link[rel="exhibit-data"][type="application/json"]') 97 | .each(function(idx) { 98 | Exhibit.Extension.InvalidJSON.process(Exhibit.jQuery(this).attr("href")); 99 | }); 100 | }); 101 | } 102 | }, 500); 103 | }()); 104 | -------------------------------------------------------------------------------- /docs/js/extensions/map/locales/de/locale.js: -------------------------------------------------------------------------------- 1 | Exhibit.Localization.importExtensionLocale("de", { 2 | "%MapView.label": "Landkarte", 3 | "%MapView.tooltip": "Zeige diese Elemente auf einer Landkarte" 4 | }); 5 | -------------------------------------------------------------------------------- /docs/js/extensions/map/locales/en/locale.js: -------------------------------------------------------------------------------- 1 | Exhibit.Localization.importExtensionLocale("en", { 2 | "%MapView.label": "Map", 3 | "%MapView.tooltip": "View items on a map", 4 | "%MapView.error.remoteImage": "A map icon attempted to load a remote image (%1$s) which could not be completed due to browser security restrictions. Either the remote host must enable CORS requests or you must host the image on the same host as this page; otherwise you'll end up relying on a Painter service." 5 | }); 6 | -------------------------------------------------------------------------------- /docs/js/extensions/map/locales/es/locale.js: -------------------------------------------------------------------------------- 1 | Exhibit.Localization.importExtensionLocale("es", { 2 | "%MapView.label": "Mapa", 3 | "%MapView.tooltip": "Visualizar elementos en un mapa" 4 | }); 5 | -------------------------------------------------------------------------------- /docs/js/extensions/map/locales/fr/locale.js: -------------------------------------------------------------------------------- 1 | Exhibit.Localization.importExtensionLocale("fr", { 2 | "%MapView.label": "Carte", 3 | "%MapView.tooltip": "Voir les items sur une carte" 4 | }); 5 | -------------------------------------------------------------------------------- /docs/js/extensions/map/locales/nl/locale.js: -------------------------------------------------------------------------------- 1 | Exhibit.Localization.importExtensionLocale("nl", { 2 | "%MapView.label": "Kaart", 3 | "%MapView.tooltip": "Bekijk items met een kaart" 4 | }); 5 | -------------------------------------------------------------------------------- /docs/js/extensions/map/locales/sv/locale.js: -------------------------------------------------------------------------------- 1 | Exhibit.Localization.importExtensionLocale("sv", { 2 | "%MapView.label": "Karta", 3 | "%MapView.tooltip": "Visa på karta" 4 | }); 5 | -------------------------------------------------------------------------------- /docs/js/extensions/map/scripts/painter.js: -------------------------------------------------------------------------------- 1 | Exhibit.MapExtension.Painter = {}; 2 | 3 | /** 4 | * @param {Numeric} width 5 | * @param {Numeric} height 6 | * @param {String} color 7 | * @param {String} label 8 | * @param {String} iconURL 9 | * @param {Numeric} iconSize 10 | * @param {Object} settings 11 | */ 12 | Exhibit.MapExtension.Painter.makeIcon = function(width, height, color, label, iconURL, iconSize, settings) { 13 | var imageParameters, shadowParameters, pinParameters, pinHeight, pinHalfWidth; 14 | 15 | if (iconSize > 0) { 16 | width = iconSize; 17 | height = iconSize; 18 | settings.pin = false; 19 | } 20 | 21 | imageParameters = [ 22 | "renderer=map-marker", 23 | "shape=" + settings.shape, 24 | "alpha=" + settings.shapeAlpha, 25 | "width=" + width, 26 | "height=" + height, 27 | "background=" + color.substr(1), 28 | "label=" + label 29 | ]; 30 | shadowParameters = [ 31 | "renderer=map-marker-shadow", 32 | "shape=" + settings.shape, 33 | "width=" + width, 34 | "height=" + height 35 | ]; 36 | pinParameters = []; 37 | if (settings.pin && iconSize <= 0) { 38 | pinHeight = settings.pinHeight; 39 | pinHalfWidth = Math.ceil(settings.pinWidth / 2); 40 | 41 | pinParameters.push("pinHeight=" + pinHeight); 42 | pinParameters.push("pinWidth=" + (pinHalfWidth * 2)); 43 | } else { 44 | pinParameters.push("pin=false"); 45 | } 46 | 47 | if (iconURL !== null) { 48 | imageParameters.push("icon=" + iconURL); 49 | if (settings.iconFit !== "smaller") { 50 | imageParameters.push("iconFit=" + settings.iconFit); 51 | } 52 | if (settings.iconScale !== 1) { 53 | imageParameters.push("iconScale=" + settings.iconScale); 54 | } 55 | if (settings.iconOffsetX !== 1) { 56 | imageParameters.push("iconX=" + settings.iconOffsetX); 57 | } 58 | if (settings.iconOffsetY !== 1) { 59 | imageParameters.push("iconY=" + settings.iconOffsetY); 60 | } 61 | } 62 | 63 | return { 64 | "iconURL": Exhibit.MapExtension.markerUrlPrefix + imageParameters.concat(pinParameters).join("&") + "&.png", 65 | "shadowURL": Exhibit.MapExtension.markerUrlPrefix + shadowParameters.concat(pinParameters).join("&") + "&.png" 66 | }; 67 | }; 68 | -------------------------------------------------------------------------------- /docs/js/extensions/map/styles/map-extension-bundle.css: -------------------------------------------------------------------------------- 1 | div.exhibit-mapView-map{border:1px solid #738699} -------------------------------------------------------------------------------- /docs/js/extensions/map/styles/map-view.css: -------------------------------------------------------------------------------- 1 | /*================================================== 2 | * Styles for map view 3 | *================================================== 4 | */ 5 | div.exhibit-mapView-map { 6 | border: 1px solid #738699; 7 | } 8 | -------------------------------------------------------------------------------- /docs/js/extensions/time/locales/de/locale.js: -------------------------------------------------------------------------------- 1 | Exhibit.Localization.importExtensionLocale("de", { 2 | "%TimelineView.label": "Zeitleiste", 3 | "%TimelineView.tooltip": "Zeige diese Elemente auf einer Zeitleiste" 4 | }); 5 | -------------------------------------------------------------------------------- /docs/js/extensions/time/locales/en/locale.js: -------------------------------------------------------------------------------- 1 | Exhibit.Localization.importExtensionLocale("en", { 2 | "%TimelineView.label": "Timeline", 3 | "%TimelineView.tooltip": "View items on a timeline" 4 | }); 5 | -------------------------------------------------------------------------------- /docs/js/extensions/time/locales/es/locale.js: -------------------------------------------------------------------------------- 1 | Exhibit.Localization.importExtensionLocale("es", { 2 | "%TimelineView.label": "Diagrama Temporal", 3 | "%TimelineView.tooltip": "Ver elementos organizados temporalmente" 4 | }); 5 | -------------------------------------------------------------------------------- /docs/js/extensions/time/locales/fr/locale.js: -------------------------------------------------------------------------------- 1 | Exhibit.Localization.importExtensionLocale("fr", { 2 | "%TimelineView.label": "Ligne de temps", 3 | "%TimelineView.tooltip": "Voir les items sur une ligne de temps" 4 | }); 5 | -------------------------------------------------------------------------------- /docs/js/extensions/time/locales/nl/locale.js: -------------------------------------------------------------------------------- 1 | Exhibit.Localization.importExtensionLocale("nl", { 2 | "%TimelineView.label": "Tijdlijn", 3 | "%TimelineView.tooltip": "Bekijk items op een tijdlijn" 4 | }); 5 | -------------------------------------------------------------------------------- /docs/js/extensions/time/locales/sv/locale.js: -------------------------------------------------------------------------------- 1 | Exhibit.Localization.importExtensionLocale("sv", { 2 | "%TimelineView.label": "Tidslinje", 3 | "%TimelineView.tooltip": "Visa på tidslinje" 4 | }); 5 | -------------------------------------------------------------------------------- /docs/js/extensions/time/styles/time-extension-bundle.css: -------------------------------------------------------------------------------- 1 | div.exhibit-timelineView-timeline{border:1px solid #738699;font-family:Trebuchet MS,Helvetica,sans serif;font-size:10pt} -------------------------------------------------------------------------------- /docs/js/extensions/time/styles/timeline-view.css: -------------------------------------------------------------------------------- 1 | div.exhibit-timelineView-timeline { 2 | border: 1px solid #738699; 3 | font-family: Trebuchet MS, Helvetica, sans serif; 4 | font-size: 10pt; 5 | } 6 | -------------------------------------------------------------------------------- /docs/js/images/arrow-left.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lmorillas/python_events/8a5f3fec8498de7cab69c35a2d9554acfe1b78ea/docs/js/images/arrow-left.gif -------------------------------------------------------------------------------- /docs/js/images/arrow-right.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lmorillas/python_events/8a5f3fec8498de7cab69c35a2d9554acfe1b78ea/docs/js/images/arrow-right.gif -------------------------------------------------------------------------------- /docs/js/images/black-check-no-border.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lmorillas/python_events/8a5f3fec8498de7cab69c35a2d9554acfe1b78ea/docs/js/images/black-check-no-border.png -------------------------------------------------------------------------------- /docs/js/images/black-check.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lmorillas/python_events/8a5f3fec8498de7cab69c35a2d9554acfe1b78ea/docs/js/images/black-check.png -------------------------------------------------------------------------------- /docs/js/images/blank-16x16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lmorillas/python_events/8a5f3fec8498de7cab69c35a2d9554acfe1b78ea/docs/js/images/blank-16x16.png -------------------------------------------------------------------------------- /docs/js/images/bookmark-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lmorillas/python_events/8a5f3fec8498de7cab69c35a2d9554acfe1b78ea/docs/js/images/bookmark-icon.png -------------------------------------------------------------------------------- /docs/js/images/bubble-arrow-point-down.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lmorillas/python_events/8a5f3fec8498de7cab69c35a2d9554acfe1b78ea/docs/js/images/bubble-arrow-point-down.png -------------------------------------------------------------------------------- /docs/js/images/bubble-arrow-point-left.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lmorillas/python_events/8a5f3fec8498de7cab69c35a2d9554acfe1b78ea/docs/js/images/bubble-arrow-point-left.png -------------------------------------------------------------------------------- /docs/js/images/bubble-arrow-point-right.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lmorillas/python_events/8a5f3fec8498de7cab69c35a2d9554acfe1b78ea/docs/js/images/bubble-arrow-point-right.png -------------------------------------------------------------------------------- /docs/js/images/bubble-arrow-point-up.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lmorillas/python_events/8a5f3fec8498de7cab69c35a2d9554acfe1b78ea/docs/js/images/bubble-arrow-point-up.png -------------------------------------------------------------------------------- /docs/js/images/bubble-bottom-left.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lmorillas/python_events/8a5f3fec8498de7cab69c35a2d9554acfe1b78ea/docs/js/images/bubble-bottom-left.png -------------------------------------------------------------------------------- /docs/js/images/bubble-bottom-right.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lmorillas/python_events/8a5f3fec8498de7cab69c35a2d9554acfe1b78ea/docs/js/images/bubble-bottom-right.png -------------------------------------------------------------------------------- /docs/js/images/bubble-bottom.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lmorillas/python_events/8a5f3fec8498de7cab69c35a2d9554acfe1b78ea/docs/js/images/bubble-bottom.png -------------------------------------------------------------------------------- /docs/js/images/bubble-left.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lmorillas/python_events/8a5f3fec8498de7cab69c35a2d9554acfe1b78ea/docs/js/images/bubble-left.png -------------------------------------------------------------------------------- /docs/js/images/bubble-right.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lmorillas/python_events/8a5f3fec8498de7cab69c35a2d9554acfe1b78ea/docs/js/images/bubble-right.png -------------------------------------------------------------------------------- /docs/js/images/bubble-top-left.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lmorillas/python_events/8a5f3fec8498de7cab69c35a2d9554acfe1b78ea/docs/js/images/bubble-top-left.png -------------------------------------------------------------------------------- /docs/js/images/bubble-top-right.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lmorillas/python_events/8a5f3fec8498de7cab69c35a2d9554acfe1b78ea/docs/js/images/bubble-top-right.png -------------------------------------------------------------------------------- /docs/js/images/bubble-top.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lmorillas/python_events/8a5f3fec8498de7cab69c35a2d9554acfe1b78ea/docs/js/images/bubble-top.png -------------------------------------------------------------------------------- /docs/js/images/close-button.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lmorillas/python_events/8a5f3fec8498de7cab69c35a2d9554acfe1b78ea/docs/js/images/close-button.png -------------------------------------------------------------------------------- /docs/js/images/collapse.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lmorillas/python_events/8a5f3fec8498de7cab69c35a2d9554acfe1b78ea/docs/js/images/collapse.png -------------------------------------------------------------------------------- /docs/js/images/copy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lmorillas/python_events/8a5f3fec8498de7cab69c35a2d9554acfe1b78ea/docs/js/images/copy.png -------------------------------------------------------------------------------- /docs/js/images/day-with-items-bkgrd.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lmorillas/python_events/8a5f3fec8498de7cab69c35a2d9554acfe1b78ea/docs/js/images/day-with-items-bkgrd.gif -------------------------------------------------------------------------------- /docs/js/images/down-arrow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lmorillas/python_events/8a5f3fec8498de7cab69c35a2d9554acfe1b78ea/docs/js/images/down-arrow.png -------------------------------------------------------------------------------- /docs/js/images/expand.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lmorillas/python_events/8a5f3fec8498de7cab69c35a2d9554acfe1b78ea/docs/js/images/expand.png -------------------------------------------------------------------------------- /docs/js/images/go-next.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lmorillas/python_events/8a5f3fec8498de7cab69c35a2d9554acfe1b78ea/docs/js/images/go-next.png -------------------------------------------------------------------------------- /docs/js/images/go-previous.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lmorillas/python_events/8a5f3fec8498de7cab69c35a2d9554acfe1b78ea/docs/js/images/go-previous.png -------------------------------------------------------------------------------- /docs/js/images/gray-check-no-border.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lmorillas/python_events/8a5f3fec8498de7cab69c35a2d9554acfe1b78ea/docs/js/images/gray-check-no-border.png -------------------------------------------------------------------------------- /docs/js/images/gray-check.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lmorillas/python_events/8a5f3fec8498de7cab69c35a2d9554acfe1b78ea/docs/js/images/gray-check.png -------------------------------------------------------------------------------- /docs/js/images/left-arrow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lmorillas/python_events/8a5f3fec8498de7cab69c35a2d9554acfe1b78ea/docs/js/images/left-arrow.png -------------------------------------------------------------------------------- /docs/js/images/liveclipboard-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lmorillas/python_events/8a5f3fec8498de7cab69c35a2d9554acfe1b78ea/docs/js/images/liveclipboard-icon.png -------------------------------------------------------------------------------- /docs/js/images/logos/exhibit-small-AliceBlue.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lmorillas/python_events/8a5f3fec8498de7cab69c35a2d9554acfe1b78ea/docs/js/images/logos/exhibit-small-AliceBlue.png -------------------------------------------------------------------------------- /docs/js/images/logos/exhibit-small-AntiqueWhite.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lmorillas/python_events/8a5f3fec8498de7cab69c35a2d9554acfe1b78ea/docs/js/images/logos/exhibit-small-AntiqueWhite.png -------------------------------------------------------------------------------- /docs/js/images/logos/exhibit-small-Aqua.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lmorillas/python_events/8a5f3fec8498de7cab69c35a2d9554acfe1b78ea/docs/js/images/logos/exhibit-small-Aqua.png -------------------------------------------------------------------------------- /docs/js/images/logos/exhibit-small-Aquamarine.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lmorillas/python_events/8a5f3fec8498de7cab69c35a2d9554acfe1b78ea/docs/js/images/logos/exhibit-small-Aquamarine.png -------------------------------------------------------------------------------- /docs/js/images/logos/exhibit-small-Azure.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lmorillas/python_events/8a5f3fec8498de7cab69c35a2d9554acfe1b78ea/docs/js/images/logos/exhibit-small-Azure.png -------------------------------------------------------------------------------- /docs/js/images/logos/exhibit-small-Beige.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lmorillas/python_events/8a5f3fec8498de7cab69c35a2d9554acfe1b78ea/docs/js/images/logos/exhibit-small-Beige.png -------------------------------------------------------------------------------- /docs/js/images/logos/exhibit-small-Bisque.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lmorillas/python_events/8a5f3fec8498de7cab69c35a2d9554acfe1b78ea/docs/js/images/logos/exhibit-small-Bisque.png -------------------------------------------------------------------------------- /docs/js/images/logos/exhibit-small-Black.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lmorillas/python_events/8a5f3fec8498de7cab69c35a2d9554acfe1b78ea/docs/js/images/logos/exhibit-small-Black.png -------------------------------------------------------------------------------- /docs/js/images/logos/exhibit-small-BlanchedAlmond.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lmorillas/python_events/8a5f3fec8498de7cab69c35a2d9554acfe1b78ea/docs/js/images/logos/exhibit-small-BlanchedAlmond.png -------------------------------------------------------------------------------- /docs/js/images/logos/exhibit-small-Blue.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lmorillas/python_events/8a5f3fec8498de7cab69c35a2d9554acfe1b78ea/docs/js/images/logos/exhibit-small-Blue.png -------------------------------------------------------------------------------- /docs/js/images/logos/exhibit-small-BlueViolet.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lmorillas/python_events/8a5f3fec8498de7cab69c35a2d9554acfe1b78ea/docs/js/images/logos/exhibit-small-BlueViolet.png -------------------------------------------------------------------------------- /docs/js/images/logos/exhibit-small-Brown.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lmorillas/python_events/8a5f3fec8498de7cab69c35a2d9554acfe1b78ea/docs/js/images/logos/exhibit-small-Brown.png -------------------------------------------------------------------------------- /docs/js/images/logos/exhibit-small-BurlyWood.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lmorillas/python_events/8a5f3fec8498de7cab69c35a2d9554acfe1b78ea/docs/js/images/logos/exhibit-small-BurlyWood.png -------------------------------------------------------------------------------- /docs/js/images/logos/exhibit-small-CadetBlue.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lmorillas/python_events/8a5f3fec8498de7cab69c35a2d9554acfe1b78ea/docs/js/images/logos/exhibit-small-CadetBlue.png -------------------------------------------------------------------------------- /docs/js/images/logos/exhibit-small-Chartreuse.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lmorillas/python_events/8a5f3fec8498de7cab69c35a2d9554acfe1b78ea/docs/js/images/logos/exhibit-small-Chartreuse.png -------------------------------------------------------------------------------- /docs/js/images/logos/exhibit-small-Chocolate.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lmorillas/python_events/8a5f3fec8498de7cab69c35a2d9554acfe1b78ea/docs/js/images/logos/exhibit-small-Chocolate.png -------------------------------------------------------------------------------- /docs/js/images/logos/exhibit-small-Coral.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lmorillas/python_events/8a5f3fec8498de7cab69c35a2d9554acfe1b78ea/docs/js/images/logos/exhibit-small-Coral.png -------------------------------------------------------------------------------- /docs/js/images/logos/exhibit-small-CornflowerBlue.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lmorillas/python_events/8a5f3fec8498de7cab69c35a2d9554acfe1b78ea/docs/js/images/logos/exhibit-small-CornflowerBlue.png -------------------------------------------------------------------------------- /docs/js/images/logos/exhibit-small-Cornsilk.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lmorillas/python_events/8a5f3fec8498de7cab69c35a2d9554acfe1b78ea/docs/js/images/logos/exhibit-small-Cornsilk.png -------------------------------------------------------------------------------- /docs/js/images/logos/exhibit-small-Crimson.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lmorillas/python_events/8a5f3fec8498de7cab69c35a2d9554acfe1b78ea/docs/js/images/logos/exhibit-small-Crimson.png -------------------------------------------------------------------------------- /docs/js/images/logos/exhibit-small-Cyan.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lmorillas/python_events/8a5f3fec8498de7cab69c35a2d9554acfe1b78ea/docs/js/images/logos/exhibit-small-Cyan.png -------------------------------------------------------------------------------- /docs/js/images/logos/exhibit-small-DarkBlue.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lmorillas/python_events/8a5f3fec8498de7cab69c35a2d9554acfe1b78ea/docs/js/images/logos/exhibit-small-DarkBlue.png -------------------------------------------------------------------------------- /docs/js/images/logos/exhibit-small-DarkCyan.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lmorillas/python_events/8a5f3fec8498de7cab69c35a2d9554acfe1b78ea/docs/js/images/logos/exhibit-small-DarkCyan.png -------------------------------------------------------------------------------- /docs/js/images/logos/exhibit-small-DarkGoldenRod.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lmorillas/python_events/8a5f3fec8498de7cab69c35a2d9554acfe1b78ea/docs/js/images/logos/exhibit-small-DarkGoldenRod.png -------------------------------------------------------------------------------- /docs/js/images/logos/exhibit-small-DarkGray.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lmorillas/python_events/8a5f3fec8498de7cab69c35a2d9554acfe1b78ea/docs/js/images/logos/exhibit-small-DarkGray.png -------------------------------------------------------------------------------- /docs/js/images/logos/exhibit-small-DarkGreen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lmorillas/python_events/8a5f3fec8498de7cab69c35a2d9554acfe1b78ea/docs/js/images/logos/exhibit-small-DarkGreen.png -------------------------------------------------------------------------------- /docs/js/images/logos/exhibit-small-DarkGrey.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lmorillas/python_events/8a5f3fec8498de7cab69c35a2d9554acfe1b78ea/docs/js/images/logos/exhibit-small-DarkGrey.png -------------------------------------------------------------------------------- /docs/js/images/logos/exhibit-small-DarkKhaki.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lmorillas/python_events/8a5f3fec8498de7cab69c35a2d9554acfe1b78ea/docs/js/images/logos/exhibit-small-DarkKhaki.png -------------------------------------------------------------------------------- /docs/js/images/logos/exhibit-small-DarkMagenta.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lmorillas/python_events/8a5f3fec8498de7cab69c35a2d9554acfe1b78ea/docs/js/images/logos/exhibit-small-DarkMagenta.png -------------------------------------------------------------------------------- /docs/js/images/logos/exhibit-small-DarkOliveGreen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lmorillas/python_events/8a5f3fec8498de7cab69c35a2d9554acfe1b78ea/docs/js/images/logos/exhibit-small-DarkOliveGreen.png -------------------------------------------------------------------------------- /docs/js/images/logos/exhibit-small-DarkOrchid.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lmorillas/python_events/8a5f3fec8498de7cab69c35a2d9554acfe1b78ea/docs/js/images/logos/exhibit-small-DarkOrchid.png -------------------------------------------------------------------------------- /docs/js/images/logos/exhibit-small-DarkRed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lmorillas/python_events/8a5f3fec8498de7cab69c35a2d9554acfe1b78ea/docs/js/images/logos/exhibit-small-DarkRed.png -------------------------------------------------------------------------------- /docs/js/images/logos/exhibit-small-DarkSalmon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lmorillas/python_events/8a5f3fec8498de7cab69c35a2d9554acfe1b78ea/docs/js/images/logos/exhibit-small-DarkSalmon.png -------------------------------------------------------------------------------- /docs/js/images/logos/exhibit-small-DarkSeaGreen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lmorillas/python_events/8a5f3fec8498de7cab69c35a2d9554acfe1b78ea/docs/js/images/logos/exhibit-small-DarkSeaGreen.png -------------------------------------------------------------------------------- /docs/js/images/logos/exhibit-small-DarkSlateBlue.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lmorillas/python_events/8a5f3fec8498de7cab69c35a2d9554acfe1b78ea/docs/js/images/logos/exhibit-small-DarkSlateBlue.png -------------------------------------------------------------------------------- /docs/js/images/logos/exhibit-small-DarkSlateGray.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lmorillas/python_events/8a5f3fec8498de7cab69c35a2d9554acfe1b78ea/docs/js/images/logos/exhibit-small-DarkSlateGray.png -------------------------------------------------------------------------------- /docs/js/images/logos/exhibit-small-DarkSlateGrey.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lmorillas/python_events/8a5f3fec8498de7cab69c35a2d9554acfe1b78ea/docs/js/images/logos/exhibit-small-DarkSlateGrey.png -------------------------------------------------------------------------------- /docs/js/images/logos/exhibit-small-DarkTurquoise.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lmorillas/python_events/8a5f3fec8498de7cab69c35a2d9554acfe1b78ea/docs/js/images/logos/exhibit-small-DarkTurquoise.png -------------------------------------------------------------------------------- /docs/js/images/logos/exhibit-small-DarkViolet.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lmorillas/python_events/8a5f3fec8498de7cab69c35a2d9554acfe1b78ea/docs/js/images/logos/exhibit-small-DarkViolet.png -------------------------------------------------------------------------------- /docs/js/images/logos/exhibit-small-Darkorange.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lmorillas/python_events/8a5f3fec8498de7cab69c35a2d9554acfe1b78ea/docs/js/images/logos/exhibit-small-Darkorange.png -------------------------------------------------------------------------------- /docs/js/images/logos/exhibit-small-DeepPink.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lmorillas/python_events/8a5f3fec8498de7cab69c35a2d9554acfe1b78ea/docs/js/images/logos/exhibit-small-DeepPink.png -------------------------------------------------------------------------------- /docs/js/images/logos/exhibit-small-DeepSkyBlue.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lmorillas/python_events/8a5f3fec8498de7cab69c35a2d9554acfe1b78ea/docs/js/images/logos/exhibit-small-DeepSkyBlue.png -------------------------------------------------------------------------------- /docs/js/images/logos/exhibit-small-DimGray.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lmorillas/python_events/8a5f3fec8498de7cab69c35a2d9554acfe1b78ea/docs/js/images/logos/exhibit-small-DimGray.png -------------------------------------------------------------------------------- /docs/js/images/logos/exhibit-small-DimGrey.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lmorillas/python_events/8a5f3fec8498de7cab69c35a2d9554acfe1b78ea/docs/js/images/logos/exhibit-small-DimGrey.png -------------------------------------------------------------------------------- /docs/js/images/logos/exhibit-small-DodgerBlue.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lmorillas/python_events/8a5f3fec8498de7cab69c35a2d9554acfe1b78ea/docs/js/images/logos/exhibit-small-DodgerBlue.png -------------------------------------------------------------------------------- /docs/js/images/logos/exhibit-small-FireBrick.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lmorillas/python_events/8a5f3fec8498de7cab69c35a2d9554acfe1b78ea/docs/js/images/logos/exhibit-small-FireBrick.png -------------------------------------------------------------------------------- /docs/js/images/logos/exhibit-small-FloralWhite.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lmorillas/python_events/8a5f3fec8498de7cab69c35a2d9554acfe1b78ea/docs/js/images/logos/exhibit-small-FloralWhite.png -------------------------------------------------------------------------------- /docs/js/images/logos/exhibit-small-ForestGreen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lmorillas/python_events/8a5f3fec8498de7cab69c35a2d9554acfe1b78ea/docs/js/images/logos/exhibit-small-ForestGreen.png -------------------------------------------------------------------------------- /docs/js/images/logos/exhibit-small-Fuchsia.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lmorillas/python_events/8a5f3fec8498de7cab69c35a2d9554acfe1b78ea/docs/js/images/logos/exhibit-small-Fuchsia.png -------------------------------------------------------------------------------- /docs/js/images/logos/exhibit-small-Gainsboro.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lmorillas/python_events/8a5f3fec8498de7cab69c35a2d9554acfe1b78ea/docs/js/images/logos/exhibit-small-Gainsboro.png -------------------------------------------------------------------------------- /docs/js/images/logos/exhibit-small-GhostWhite.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lmorillas/python_events/8a5f3fec8498de7cab69c35a2d9554acfe1b78ea/docs/js/images/logos/exhibit-small-GhostWhite.png -------------------------------------------------------------------------------- /docs/js/images/logos/exhibit-small-Gold.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lmorillas/python_events/8a5f3fec8498de7cab69c35a2d9554acfe1b78ea/docs/js/images/logos/exhibit-small-Gold.png -------------------------------------------------------------------------------- /docs/js/images/logos/exhibit-small-GoldenRod.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lmorillas/python_events/8a5f3fec8498de7cab69c35a2d9554acfe1b78ea/docs/js/images/logos/exhibit-small-GoldenRod.png -------------------------------------------------------------------------------- /docs/js/images/logos/exhibit-small-Gray.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lmorillas/python_events/8a5f3fec8498de7cab69c35a2d9554acfe1b78ea/docs/js/images/logos/exhibit-small-Gray.png -------------------------------------------------------------------------------- /docs/js/images/logos/exhibit-small-Green.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lmorillas/python_events/8a5f3fec8498de7cab69c35a2d9554acfe1b78ea/docs/js/images/logos/exhibit-small-Green.png -------------------------------------------------------------------------------- /docs/js/images/logos/exhibit-small-GreenYellow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lmorillas/python_events/8a5f3fec8498de7cab69c35a2d9554acfe1b78ea/docs/js/images/logos/exhibit-small-GreenYellow.png -------------------------------------------------------------------------------- /docs/js/images/logos/exhibit-small-Grey.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lmorillas/python_events/8a5f3fec8498de7cab69c35a2d9554acfe1b78ea/docs/js/images/logos/exhibit-small-Grey.png -------------------------------------------------------------------------------- /docs/js/images/logos/exhibit-small-HoneyDew.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lmorillas/python_events/8a5f3fec8498de7cab69c35a2d9554acfe1b78ea/docs/js/images/logos/exhibit-small-HoneyDew.png -------------------------------------------------------------------------------- /docs/js/images/logos/exhibit-small-HotPink.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lmorillas/python_events/8a5f3fec8498de7cab69c35a2d9554acfe1b78ea/docs/js/images/logos/exhibit-small-HotPink.png -------------------------------------------------------------------------------- /docs/js/images/logos/exhibit-small-IndianRed .png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lmorillas/python_events/8a5f3fec8498de7cab69c35a2d9554acfe1b78ea/docs/js/images/logos/exhibit-small-IndianRed .png -------------------------------------------------------------------------------- /docs/js/images/logos/exhibit-small-Indigo .png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lmorillas/python_events/8a5f3fec8498de7cab69c35a2d9554acfe1b78ea/docs/js/images/logos/exhibit-small-Indigo .png -------------------------------------------------------------------------------- /docs/js/images/logos/exhibit-small-Ivory.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lmorillas/python_events/8a5f3fec8498de7cab69c35a2d9554acfe1b78ea/docs/js/images/logos/exhibit-small-Ivory.png -------------------------------------------------------------------------------- /docs/js/images/logos/exhibit-small-Khaki.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lmorillas/python_events/8a5f3fec8498de7cab69c35a2d9554acfe1b78ea/docs/js/images/logos/exhibit-small-Khaki.png -------------------------------------------------------------------------------- /docs/js/images/logos/exhibit-small-Lavender.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lmorillas/python_events/8a5f3fec8498de7cab69c35a2d9554acfe1b78ea/docs/js/images/logos/exhibit-small-Lavender.png -------------------------------------------------------------------------------- /docs/js/images/logos/exhibit-small-LavenderBlush.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lmorillas/python_events/8a5f3fec8498de7cab69c35a2d9554acfe1b78ea/docs/js/images/logos/exhibit-small-LavenderBlush.png -------------------------------------------------------------------------------- /docs/js/images/logos/exhibit-small-LawnGreen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lmorillas/python_events/8a5f3fec8498de7cab69c35a2d9554acfe1b78ea/docs/js/images/logos/exhibit-small-LawnGreen.png -------------------------------------------------------------------------------- /docs/js/images/logos/exhibit-small-LemonChiffon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lmorillas/python_events/8a5f3fec8498de7cab69c35a2d9554acfe1b78ea/docs/js/images/logos/exhibit-small-LemonChiffon.png -------------------------------------------------------------------------------- /docs/js/images/logos/exhibit-small-LightBlue.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lmorillas/python_events/8a5f3fec8498de7cab69c35a2d9554acfe1b78ea/docs/js/images/logos/exhibit-small-LightBlue.png -------------------------------------------------------------------------------- /docs/js/images/logos/exhibit-small-LightCoral.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lmorillas/python_events/8a5f3fec8498de7cab69c35a2d9554acfe1b78ea/docs/js/images/logos/exhibit-small-LightCoral.png -------------------------------------------------------------------------------- /docs/js/images/logos/exhibit-small-LightCyan.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lmorillas/python_events/8a5f3fec8498de7cab69c35a2d9554acfe1b78ea/docs/js/images/logos/exhibit-small-LightCyan.png -------------------------------------------------------------------------------- /docs/js/images/logos/exhibit-small-LightGoldenRodYellow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lmorillas/python_events/8a5f3fec8498de7cab69c35a2d9554acfe1b78ea/docs/js/images/logos/exhibit-small-LightGoldenRodYellow.png -------------------------------------------------------------------------------- /docs/js/images/logos/exhibit-small-LightGray.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lmorillas/python_events/8a5f3fec8498de7cab69c35a2d9554acfe1b78ea/docs/js/images/logos/exhibit-small-LightGray.png -------------------------------------------------------------------------------- /docs/js/images/logos/exhibit-small-LightGreen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lmorillas/python_events/8a5f3fec8498de7cab69c35a2d9554acfe1b78ea/docs/js/images/logos/exhibit-small-LightGreen.png -------------------------------------------------------------------------------- /docs/js/images/logos/exhibit-small-LightGrey.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lmorillas/python_events/8a5f3fec8498de7cab69c35a2d9554acfe1b78ea/docs/js/images/logos/exhibit-small-LightGrey.png -------------------------------------------------------------------------------- /docs/js/images/logos/exhibit-small-LightPink.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lmorillas/python_events/8a5f3fec8498de7cab69c35a2d9554acfe1b78ea/docs/js/images/logos/exhibit-small-LightPink.png -------------------------------------------------------------------------------- /docs/js/images/logos/exhibit-small-LightSalmon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lmorillas/python_events/8a5f3fec8498de7cab69c35a2d9554acfe1b78ea/docs/js/images/logos/exhibit-small-LightSalmon.png -------------------------------------------------------------------------------- /docs/js/images/logos/exhibit-small-LightSeaGreen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lmorillas/python_events/8a5f3fec8498de7cab69c35a2d9554acfe1b78ea/docs/js/images/logos/exhibit-small-LightSeaGreen.png -------------------------------------------------------------------------------- /docs/js/images/logos/exhibit-small-LightSkyBlue.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lmorillas/python_events/8a5f3fec8498de7cab69c35a2d9554acfe1b78ea/docs/js/images/logos/exhibit-small-LightSkyBlue.png -------------------------------------------------------------------------------- /docs/js/images/logos/exhibit-small-LightSlateGray.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lmorillas/python_events/8a5f3fec8498de7cab69c35a2d9554acfe1b78ea/docs/js/images/logos/exhibit-small-LightSlateGray.png -------------------------------------------------------------------------------- /docs/js/images/logos/exhibit-small-LightSlateGrey.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lmorillas/python_events/8a5f3fec8498de7cab69c35a2d9554acfe1b78ea/docs/js/images/logos/exhibit-small-LightSlateGrey.png -------------------------------------------------------------------------------- /docs/js/images/logos/exhibit-small-LightSteelBlue.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lmorillas/python_events/8a5f3fec8498de7cab69c35a2d9554acfe1b78ea/docs/js/images/logos/exhibit-small-LightSteelBlue.png -------------------------------------------------------------------------------- /docs/js/images/logos/exhibit-small-LightYellow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lmorillas/python_events/8a5f3fec8498de7cab69c35a2d9554acfe1b78ea/docs/js/images/logos/exhibit-small-LightYellow.png -------------------------------------------------------------------------------- /docs/js/images/logos/exhibit-small-Lime.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lmorillas/python_events/8a5f3fec8498de7cab69c35a2d9554acfe1b78ea/docs/js/images/logos/exhibit-small-Lime.png -------------------------------------------------------------------------------- /docs/js/images/logos/exhibit-small-LimeGreen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lmorillas/python_events/8a5f3fec8498de7cab69c35a2d9554acfe1b78ea/docs/js/images/logos/exhibit-small-LimeGreen.png -------------------------------------------------------------------------------- /docs/js/images/logos/exhibit-small-Linen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lmorillas/python_events/8a5f3fec8498de7cab69c35a2d9554acfe1b78ea/docs/js/images/logos/exhibit-small-Linen.png -------------------------------------------------------------------------------- /docs/js/images/logos/exhibit-small-Magenta.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lmorillas/python_events/8a5f3fec8498de7cab69c35a2d9554acfe1b78ea/docs/js/images/logos/exhibit-small-Magenta.png -------------------------------------------------------------------------------- /docs/js/images/logos/exhibit-small-Maroon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lmorillas/python_events/8a5f3fec8498de7cab69c35a2d9554acfe1b78ea/docs/js/images/logos/exhibit-small-Maroon.png -------------------------------------------------------------------------------- /docs/js/images/logos/exhibit-small-MediumAquaMarine.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lmorillas/python_events/8a5f3fec8498de7cab69c35a2d9554acfe1b78ea/docs/js/images/logos/exhibit-small-MediumAquaMarine.png -------------------------------------------------------------------------------- /docs/js/images/logos/exhibit-small-MediumBlue.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lmorillas/python_events/8a5f3fec8498de7cab69c35a2d9554acfe1b78ea/docs/js/images/logos/exhibit-small-MediumBlue.png -------------------------------------------------------------------------------- /docs/js/images/logos/exhibit-small-MediumOrchid.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lmorillas/python_events/8a5f3fec8498de7cab69c35a2d9554acfe1b78ea/docs/js/images/logos/exhibit-small-MediumOrchid.png -------------------------------------------------------------------------------- /docs/js/images/logos/exhibit-small-MediumPurple.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lmorillas/python_events/8a5f3fec8498de7cab69c35a2d9554acfe1b78ea/docs/js/images/logos/exhibit-small-MediumPurple.png -------------------------------------------------------------------------------- /docs/js/images/logos/exhibit-small-MediumSeaGreen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lmorillas/python_events/8a5f3fec8498de7cab69c35a2d9554acfe1b78ea/docs/js/images/logos/exhibit-small-MediumSeaGreen.png -------------------------------------------------------------------------------- /docs/js/images/logos/exhibit-small-MediumSlateBlue.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lmorillas/python_events/8a5f3fec8498de7cab69c35a2d9554acfe1b78ea/docs/js/images/logos/exhibit-small-MediumSlateBlue.png -------------------------------------------------------------------------------- /docs/js/images/logos/exhibit-small-MediumSpringGreen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lmorillas/python_events/8a5f3fec8498de7cab69c35a2d9554acfe1b78ea/docs/js/images/logos/exhibit-small-MediumSpringGreen.png -------------------------------------------------------------------------------- /docs/js/images/logos/exhibit-small-MediumTurquoise.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lmorillas/python_events/8a5f3fec8498de7cab69c35a2d9554acfe1b78ea/docs/js/images/logos/exhibit-small-MediumTurquoise.png -------------------------------------------------------------------------------- /docs/js/images/logos/exhibit-small-MediumVioletRed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lmorillas/python_events/8a5f3fec8498de7cab69c35a2d9554acfe1b78ea/docs/js/images/logos/exhibit-small-MediumVioletRed.png -------------------------------------------------------------------------------- /docs/js/images/logos/exhibit-small-MidnightBlue.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lmorillas/python_events/8a5f3fec8498de7cab69c35a2d9554acfe1b78ea/docs/js/images/logos/exhibit-small-MidnightBlue.png -------------------------------------------------------------------------------- /docs/js/images/logos/exhibit-small-MintCream.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lmorillas/python_events/8a5f3fec8498de7cab69c35a2d9554acfe1b78ea/docs/js/images/logos/exhibit-small-MintCream.png -------------------------------------------------------------------------------- /docs/js/images/logos/exhibit-small-MistyRose.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lmorillas/python_events/8a5f3fec8498de7cab69c35a2d9554acfe1b78ea/docs/js/images/logos/exhibit-small-MistyRose.png -------------------------------------------------------------------------------- /docs/js/images/logos/exhibit-small-Moccasin.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lmorillas/python_events/8a5f3fec8498de7cab69c35a2d9554acfe1b78ea/docs/js/images/logos/exhibit-small-Moccasin.png -------------------------------------------------------------------------------- /docs/js/images/logos/exhibit-small-NavajoWhite.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lmorillas/python_events/8a5f3fec8498de7cab69c35a2d9554acfe1b78ea/docs/js/images/logos/exhibit-small-NavajoWhite.png -------------------------------------------------------------------------------- /docs/js/images/logos/exhibit-small-Navy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lmorillas/python_events/8a5f3fec8498de7cab69c35a2d9554acfe1b78ea/docs/js/images/logos/exhibit-small-Navy.png -------------------------------------------------------------------------------- /docs/js/images/logos/exhibit-small-OldLace.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lmorillas/python_events/8a5f3fec8498de7cab69c35a2d9554acfe1b78ea/docs/js/images/logos/exhibit-small-OldLace.png -------------------------------------------------------------------------------- /docs/js/images/logos/exhibit-small-Olive.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lmorillas/python_events/8a5f3fec8498de7cab69c35a2d9554acfe1b78ea/docs/js/images/logos/exhibit-small-Olive.png -------------------------------------------------------------------------------- /docs/js/images/logos/exhibit-small-OliveDrab.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lmorillas/python_events/8a5f3fec8498de7cab69c35a2d9554acfe1b78ea/docs/js/images/logos/exhibit-small-OliveDrab.png -------------------------------------------------------------------------------- /docs/js/images/logos/exhibit-small-Orange.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lmorillas/python_events/8a5f3fec8498de7cab69c35a2d9554acfe1b78ea/docs/js/images/logos/exhibit-small-Orange.png -------------------------------------------------------------------------------- /docs/js/images/logos/exhibit-small-OrangeRed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lmorillas/python_events/8a5f3fec8498de7cab69c35a2d9554acfe1b78ea/docs/js/images/logos/exhibit-small-OrangeRed.png -------------------------------------------------------------------------------- /docs/js/images/logos/exhibit-small-Orchid.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lmorillas/python_events/8a5f3fec8498de7cab69c35a2d9554acfe1b78ea/docs/js/images/logos/exhibit-small-Orchid.png -------------------------------------------------------------------------------- /docs/js/images/logos/exhibit-small-PaleGoldenRod.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lmorillas/python_events/8a5f3fec8498de7cab69c35a2d9554acfe1b78ea/docs/js/images/logos/exhibit-small-PaleGoldenRod.png -------------------------------------------------------------------------------- /docs/js/images/logos/exhibit-small-PaleGreen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lmorillas/python_events/8a5f3fec8498de7cab69c35a2d9554acfe1b78ea/docs/js/images/logos/exhibit-small-PaleGreen.png -------------------------------------------------------------------------------- /docs/js/images/logos/exhibit-small-PaleTurquoise.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lmorillas/python_events/8a5f3fec8498de7cab69c35a2d9554acfe1b78ea/docs/js/images/logos/exhibit-small-PaleTurquoise.png -------------------------------------------------------------------------------- /docs/js/images/logos/exhibit-small-PaleVioletRed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lmorillas/python_events/8a5f3fec8498de7cab69c35a2d9554acfe1b78ea/docs/js/images/logos/exhibit-small-PaleVioletRed.png -------------------------------------------------------------------------------- /docs/js/images/logos/exhibit-small-PapayaWhip.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lmorillas/python_events/8a5f3fec8498de7cab69c35a2d9554acfe1b78ea/docs/js/images/logos/exhibit-small-PapayaWhip.png -------------------------------------------------------------------------------- /docs/js/images/logos/exhibit-small-PeachPuff.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lmorillas/python_events/8a5f3fec8498de7cab69c35a2d9554acfe1b78ea/docs/js/images/logos/exhibit-small-PeachPuff.png -------------------------------------------------------------------------------- /docs/js/images/logos/exhibit-small-Peru.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lmorillas/python_events/8a5f3fec8498de7cab69c35a2d9554acfe1b78ea/docs/js/images/logos/exhibit-small-Peru.png -------------------------------------------------------------------------------- /docs/js/images/logos/exhibit-small-Pink.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lmorillas/python_events/8a5f3fec8498de7cab69c35a2d9554acfe1b78ea/docs/js/images/logos/exhibit-small-Pink.png -------------------------------------------------------------------------------- /docs/js/images/logos/exhibit-small-Plum.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lmorillas/python_events/8a5f3fec8498de7cab69c35a2d9554acfe1b78ea/docs/js/images/logos/exhibit-small-Plum.png -------------------------------------------------------------------------------- /docs/js/images/logos/exhibit-small-PowderBlue.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lmorillas/python_events/8a5f3fec8498de7cab69c35a2d9554acfe1b78ea/docs/js/images/logos/exhibit-small-PowderBlue.png -------------------------------------------------------------------------------- /docs/js/images/logos/exhibit-small-Purple.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lmorillas/python_events/8a5f3fec8498de7cab69c35a2d9554acfe1b78ea/docs/js/images/logos/exhibit-small-Purple.png -------------------------------------------------------------------------------- /docs/js/images/logos/exhibit-small-Red.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lmorillas/python_events/8a5f3fec8498de7cab69c35a2d9554acfe1b78ea/docs/js/images/logos/exhibit-small-Red.png -------------------------------------------------------------------------------- /docs/js/images/logos/exhibit-small-RosyBrown.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lmorillas/python_events/8a5f3fec8498de7cab69c35a2d9554acfe1b78ea/docs/js/images/logos/exhibit-small-RosyBrown.png -------------------------------------------------------------------------------- /docs/js/images/logos/exhibit-small-RoyalBlue.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lmorillas/python_events/8a5f3fec8498de7cab69c35a2d9554acfe1b78ea/docs/js/images/logos/exhibit-small-RoyalBlue.png -------------------------------------------------------------------------------- /docs/js/images/logos/exhibit-small-SaddleBrown.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lmorillas/python_events/8a5f3fec8498de7cab69c35a2d9554acfe1b78ea/docs/js/images/logos/exhibit-small-SaddleBrown.png -------------------------------------------------------------------------------- /docs/js/images/logos/exhibit-small-Salmon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lmorillas/python_events/8a5f3fec8498de7cab69c35a2d9554acfe1b78ea/docs/js/images/logos/exhibit-small-Salmon.png -------------------------------------------------------------------------------- /docs/js/images/logos/exhibit-small-SandyBrown.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lmorillas/python_events/8a5f3fec8498de7cab69c35a2d9554acfe1b78ea/docs/js/images/logos/exhibit-small-SandyBrown.png -------------------------------------------------------------------------------- /docs/js/images/logos/exhibit-small-SeaGreen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lmorillas/python_events/8a5f3fec8498de7cab69c35a2d9554acfe1b78ea/docs/js/images/logos/exhibit-small-SeaGreen.png -------------------------------------------------------------------------------- /docs/js/images/logos/exhibit-small-SeaShell.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lmorillas/python_events/8a5f3fec8498de7cab69c35a2d9554acfe1b78ea/docs/js/images/logos/exhibit-small-SeaShell.png -------------------------------------------------------------------------------- /docs/js/images/logos/exhibit-small-Sienna.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lmorillas/python_events/8a5f3fec8498de7cab69c35a2d9554acfe1b78ea/docs/js/images/logos/exhibit-small-Sienna.png -------------------------------------------------------------------------------- /docs/js/images/logos/exhibit-small-Silver.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lmorillas/python_events/8a5f3fec8498de7cab69c35a2d9554acfe1b78ea/docs/js/images/logos/exhibit-small-Silver.png -------------------------------------------------------------------------------- /docs/js/images/logos/exhibit-small-SkyBlue.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lmorillas/python_events/8a5f3fec8498de7cab69c35a2d9554acfe1b78ea/docs/js/images/logos/exhibit-small-SkyBlue.png -------------------------------------------------------------------------------- /docs/js/images/logos/exhibit-small-SlateBlue.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lmorillas/python_events/8a5f3fec8498de7cab69c35a2d9554acfe1b78ea/docs/js/images/logos/exhibit-small-SlateBlue.png -------------------------------------------------------------------------------- /docs/js/images/logos/exhibit-small-SlateGray.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lmorillas/python_events/8a5f3fec8498de7cab69c35a2d9554acfe1b78ea/docs/js/images/logos/exhibit-small-SlateGray.png -------------------------------------------------------------------------------- /docs/js/images/logos/exhibit-small-SlateGrey.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lmorillas/python_events/8a5f3fec8498de7cab69c35a2d9554acfe1b78ea/docs/js/images/logos/exhibit-small-SlateGrey.png -------------------------------------------------------------------------------- /docs/js/images/logos/exhibit-small-Snow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lmorillas/python_events/8a5f3fec8498de7cab69c35a2d9554acfe1b78ea/docs/js/images/logos/exhibit-small-Snow.png -------------------------------------------------------------------------------- /docs/js/images/logos/exhibit-small-SpringGreen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lmorillas/python_events/8a5f3fec8498de7cab69c35a2d9554acfe1b78ea/docs/js/images/logos/exhibit-small-SpringGreen.png -------------------------------------------------------------------------------- /docs/js/images/logos/exhibit-small-SteelBlue.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lmorillas/python_events/8a5f3fec8498de7cab69c35a2d9554acfe1b78ea/docs/js/images/logos/exhibit-small-SteelBlue.png -------------------------------------------------------------------------------- /docs/js/images/logos/exhibit-small-Tan.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lmorillas/python_events/8a5f3fec8498de7cab69c35a2d9554acfe1b78ea/docs/js/images/logos/exhibit-small-Tan.png -------------------------------------------------------------------------------- /docs/js/images/logos/exhibit-small-Teal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lmorillas/python_events/8a5f3fec8498de7cab69c35a2d9554acfe1b78ea/docs/js/images/logos/exhibit-small-Teal.png -------------------------------------------------------------------------------- /docs/js/images/logos/exhibit-small-Thistle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lmorillas/python_events/8a5f3fec8498de7cab69c35a2d9554acfe1b78ea/docs/js/images/logos/exhibit-small-Thistle.png -------------------------------------------------------------------------------- /docs/js/images/logos/exhibit-small-Tomato.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lmorillas/python_events/8a5f3fec8498de7cab69c35a2d9554acfe1b78ea/docs/js/images/logos/exhibit-small-Tomato.png -------------------------------------------------------------------------------- /docs/js/images/logos/exhibit-small-Turquoise.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lmorillas/python_events/8a5f3fec8498de7cab69c35a2d9554acfe1b78ea/docs/js/images/logos/exhibit-small-Turquoise.png -------------------------------------------------------------------------------- /docs/js/images/logos/exhibit-small-Violet.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lmorillas/python_events/8a5f3fec8498de7cab69c35a2d9554acfe1b78ea/docs/js/images/logos/exhibit-small-Violet.png -------------------------------------------------------------------------------- /docs/js/images/logos/exhibit-small-Wheat.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lmorillas/python_events/8a5f3fec8498de7cab69c35a2d9554acfe1b78ea/docs/js/images/logos/exhibit-small-Wheat.png -------------------------------------------------------------------------------- /docs/js/images/logos/exhibit-small-White.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lmorillas/python_events/8a5f3fec8498de7cab69c35a2d9554acfe1b78ea/docs/js/images/logos/exhibit-small-White.png -------------------------------------------------------------------------------- /docs/js/images/logos/exhibit-small-WhiteSmoke.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lmorillas/python_events/8a5f3fec8498de7cab69c35a2d9554acfe1b78ea/docs/js/images/logos/exhibit-small-WhiteSmoke.png -------------------------------------------------------------------------------- /docs/js/images/logos/exhibit-small-Yellow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lmorillas/python_events/8a5f3fec8498de7cab69c35a2d9554acfe1b78ea/docs/js/images/logos/exhibit-small-Yellow.png -------------------------------------------------------------------------------- /docs/js/images/logos/exhibit-small-YellowGreen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lmorillas/python_events/8a5f3fec8498de7cab69c35a2d9554acfe1b78ea/docs/js/images/logos/exhibit-small-YellowGreen.png -------------------------------------------------------------------------------- /docs/js/images/map-marker-shadow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lmorillas/python_events/8a5f3fec8498de7cab69c35a2d9554acfe1b78ea/docs/js/images/map-marker-shadow.png -------------------------------------------------------------------------------- /docs/js/images/message-bottom-left.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lmorillas/python_events/8a5f3fec8498de7cab69c35a2d9554acfe1b78ea/docs/js/images/message-bottom-left.png -------------------------------------------------------------------------------- /docs/js/images/message-bottom-right.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lmorillas/python_events/8a5f3fec8498de7cab69c35a2d9554acfe1b78ea/docs/js/images/message-bottom-right.png -------------------------------------------------------------------------------- /docs/js/images/message-bubble/message-bottom-left.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lmorillas/python_events/8a5f3fec8498de7cab69c35a2d9554acfe1b78ea/docs/js/images/message-bubble/message-bottom-left.png -------------------------------------------------------------------------------- /docs/js/images/message-bubble/message-bottom-right.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lmorillas/python_events/8a5f3fec8498de7cab69c35a2d9554acfe1b78ea/docs/js/images/message-bubble/message-bottom-right.png -------------------------------------------------------------------------------- /docs/js/images/message-bubble/message-left.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lmorillas/python_events/8a5f3fec8498de7cab69c35a2d9554acfe1b78ea/docs/js/images/message-bubble/message-left.png -------------------------------------------------------------------------------- /docs/js/images/message-bubble/message-right.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lmorillas/python_events/8a5f3fec8498de7cab69c35a2d9554acfe1b78ea/docs/js/images/message-bubble/message-right.png -------------------------------------------------------------------------------- /docs/js/images/message-bubble/message-top-left.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lmorillas/python_events/8a5f3fec8498de7cab69c35a2d9554acfe1b78ea/docs/js/images/message-bubble/message-top-left.png -------------------------------------------------------------------------------- /docs/js/images/message-bubble/message-top-right.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lmorillas/python_events/8a5f3fec8498de7cab69c35a2d9554acfe1b78ea/docs/js/images/message-bubble/message-top-right.png -------------------------------------------------------------------------------- /docs/js/images/message-left.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lmorillas/python_events/8a5f3fec8498de7cab69c35a2d9554acfe1b78ea/docs/js/images/message-left.png -------------------------------------------------------------------------------- /docs/js/images/message-right.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lmorillas/python_events/8a5f3fec8498de7cab69c35a2d9554acfe1b78ea/docs/js/images/message-right.png -------------------------------------------------------------------------------- /docs/js/images/message-top-left.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lmorillas/python_events/8a5f3fec8498de7cab69c35a2d9554acfe1b78ea/docs/js/images/message-top-left.png -------------------------------------------------------------------------------- /docs/js/images/message-top-right.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lmorillas/python_events/8a5f3fec8498de7cab69c35a2d9554acfe1b78ea/docs/js/images/message-top-right.png -------------------------------------------------------------------------------- /docs/js/images/month-header-left.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lmorillas/python_events/8a5f3fec8498de7cab69c35a2d9554acfe1b78ea/docs/js/images/month-header-left.gif -------------------------------------------------------------------------------- /docs/js/images/month-header-right.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lmorillas/python_events/8a5f3fec8498de7cab69c35a2d9554acfe1b78ea/docs/js/images/month-header-right.gif -------------------------------------------------------------------------------- /docs/js/images/no-check-no-border.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lmorillas/python_events/8a5f3fec8498de7cab69c35a2d9554acfe1b78ea/docs/js/images/no-check-no-border.png -------------------------------------------------------------------------------- /docs/js/images/no-check.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lmorillas/python_events/8a5f3fec8498de7cab69c35a2d9554acfe1b78ea/docs/js/images/no-check.png -------------------------------------------------------------------------------- /docs/js/images/option-check.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lmorillas/python_events/8a5f3fec8498de7cab69c35a2d9554acfe1b78ea/docs/js/images/option-check.png -------------------------------------------------------------------------------- /docs/js/images/option.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lmorillas/python_events/8a5f3fec8498de7cab69c35a2d9554acfe1b78ea/docs/js/images/option.png -------------------------------------------------------------------------------- /docs/js/images/progress-running.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lmorillas/python_events/8a5f3fec8498de7cab69c35a2d9554acfe1b78ea/docs/js/images/progress-running.gif -------------------------------------------------------------------------------- /docs/js/images/reset-history-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lmorillas/python_events/8a5f3fec8498de7cab69c35a2d9554acfe1b78ea/docs/js/images/reset-history-icon.png -------------------------------------------------------------------------------- /docs/js/images/right-arrow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lmorillas/python_events/8a5f3fec8498de7cab69c35a2d9554acfe1b78ea/docs/js/images/right-arrow.png -------------------------------------------------------------------------------- /docs/js/images/slider-handle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lmorillas/python_events/8a5f3fec8498de7cab69c35a2d9554acfe1b78ea/docs/js/images/slider-handle.png -------------------------------------------------------------------------------- /docs/js/images/slider-handle2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lmorillas/python_events/8a5f3fec8498de7cab69c35a2d9554acfe1b78ea/docs/js/images/slider-handle2.png -------------------------------------------------------------------------------- /docs/js/images/up-arrow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lmorillas/python_events/8a5f3fec8498de7cab69c35a2d9554acfe1b78ea/docs/js/images/up-arrow.png -------------------------------------------------------------------------------- /docs/js/images/week-selector-active.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lmorillas/python_events/8a5f3fec8498de7cab69c35a2d9554acfe1b78ea/docs/js/images/week-selector-active.gif -------------------------------------------------------------------------------- /docs/js/images/week-selector.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lmorillas/python_events/8a5f3fec8498de7cab69c35a2d9554acfe1b78ea/docs/js/images/week-selector.gif -------------------------------------------------------------------------------- /docs/js/lib/LAB.min.js: -------------------------------------------------------------------------------- 1 | /*! LAB.js (LABjs :: Loading And Blocking JavaScript) 2 | v2.0.3 (c) Kyle Simpson 3 | MIT License 4 | */ 5 | (function(o){var K=o.$LAB,y="UseLocalXHR",z="AlwaysPreserveOrder",u="AllowDuplicates",A="CacheBust",B="BasePath",C=/^[^?#]*\//.exec(location.href)[0],D=/^\w+\:\/\/\/?[^\/]+/.exec(C)[0],i=document.head||document.getElementsByTagName("head"),L=(o.opera&&Object.prototype.toString.call(o.opera)=="[object Opera]")||("MozAppearance"in document.documentElement.style),q=document.createElement("script"),E=typeof q.preload=="boolean",r=E||(q.readyState&&q.readyState=="uninitialized"),F=!r&&q.async===true,M=!r&&!F&&!L;function G(a){return Object.prototype.toString.call(a)=="[object Function]"}function H(a){return Object.prototype.toString.call(a)=="[object Array]"}function N(a,c){var b=/^\w+\:\/\//;if(/^\/\/\/?/.test(a)){a=location.protocol+a}else if(!b.test(a)&&a.charAt(0)!="/"){a=(c||"")+a}return b.test(a)?a:((a.charAt(0)=="/"?D:C)+a)}function s(a,c){for(var b in a){if(a.hasOwnProperty(b)){c[b]=a[b]}}return c}function O(a){var c=false;for(var b=0;b0){for(var a=0;a=0;){d=n.shift();a=a[d.type].apply(null,d.args)}return a},noConflict:function(){o.$LAB=K;return m},sandbox:function(){return J()}};return m}o.$LAB=J();(function(a,c,b){if(document.readyState==null&&document[a]){document.readyState="loading";document[a](c,b=function(){document.removeEventListener(c,b,false);document.readyState="complete"},false)}})("addEventListener","DOMContentLoaded")})(this); -------------------------------------------------------------------------------- /docs/js/lib/base64.js: -------------------------------------------------------------------------------- 1 | // From https://ecmanaut.googlecode.com/svn/trunk/lib/base64.js 2 | // Based on public domain code by Tyler Akins 3 | // Original code at http://rumkin.com/tools/compression/base64.php 4 | 5 | var Base64 = (function() { 6 | function encode_base64(data) { 7 | var out = "", c1, c2, c3, e1, e2, e3, e4; 8 | for (var i = 0; i < data.length; ) { 9 | c1 = data.charCodeAt(i++); 10 | c2 = data.charCodeAt(i++); 11 | c3 = data.charCodeAt(i++); 12 | e1 = c1 >> 2; 13 | e2 = ((c1 & 3) << 4) + (c2 >> 4); 14 | e3 = ((c2 & 15) << 2) + (c3 >> 6); 15 | e4 = c3 & 63; 16 | if (isNaN(c2)) 17 | e3 = e4 = 64; 18 | else if (isNaN(c3)) 19 | e4 = 64; 20 | out += tab.charAt(e1) + tab.charAt(e2) + tab.charAt(e3) + tab.charAt(e4); 21 | } 22 | return out; 23 | } 24 | 25 | function decode_base64(data) { 26 | var out = "", c1, c2, c3, e1, e2, e3, e4; 27 | for (var i = 0; i < data.length; ) { 28 | e1 = tab.indexOf(data.charAt(i++)); 29 | e2 = tab.indexOf(data.charAt(i++)); 30 | e3 = tab.indexOf(data.charAt(i++)); 31 | e4 = tab.indexOf(data.charAt(i++)); 32 | c1 = (e1 << 2) + (e2 >> 4); 33 | c2 = ((e2 & 15) << 4) + (e3 >> 2); 34 | c3 = ((e3 & 3) << 6) + e4; 35 | out += String.fromCharCode(c1); 36 | if (e3 != 64) 37 | out += String.fromCharCode(c2); 38 | if (e4 != 64) 39 | out += String.fromCharCode(c3); 40 | } 41 | return out; 42 | } 43 | 44 | var tab = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_="; 45 | return { encode:encode_base64, decode:decode_base64 }; 46 | })(); 47 | -------------------------------------------------------------------------------- /docs/js/lib/jquery.history.shim.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @fileOverview Modify History.js to take over all anchor management. 3 | * @author Ryan Lee 4 | */ 5 | 6 | /** 7 | * Always return true so History.js won't futz with page anchors. 8 | * It is unlikely this type of option would be placed into History.js 9 | * proper, so expect it to stay here. 10 | * 11 | * @returns {Boolean} 12 | */ 13 | History.isTraditionalAnchor = function() { 14 | return true; 15 | }; 16 | -------------------------------------------------------------------------------- /docs/js/lib/json2.js: -------------------------------------------------------------------------------- 1 | var JSON;JSON||(JSON={}),function(){function str(a,b){var c,d,e,f,g=gap,h,i=b[a];i&&typeof i=="object"&&typeof i.toJSON=="function"&&(i=i.toJSON(a)),typeof rep=="function"&&(i=rep.call(b,a,i));switch(typeof i){case"string":return quote(i);case"number":return isFinite(i)?String(i):"null";case"boolean":case"null":return String(i);case"object":if(!i)return"null";gap+=indent,h=[];if(Object.prototype.toString.apply(i)==="[object Array]"){f=i.length;for(c=0;cRyan Lee 6 | */ 7 | 8 | /** 9 | * @namespace 10 | */ 11 | Exhibit.Backwards.Attributes = { 12 | "prefix": "ex:" 13 | }; 14 | 15 | /** 16 | * Call to switch Exhibit into backwards compatibility mode for Exhibit 17 | * attributes. 18 | * @static 19 | */ 20 | Exhibit.Backwards.Attributes.enable = function() { 21 | Exhibit.Backwards.enabled.Attributes = true; 22 | Exhibit.getAttribute = Exhibit.Backwards.Attributes.getAttribute; 23 | Exhibit.extractOptionsFromElement = Exhibit.Backwards.Attributes.extractOptionsFromElement; 24 | Exhibit.isExhibitAttribute = Exhibit.Backwards.Attributes.isExhibitAttribute; 25 | Exhibit.makeExhibitAttribute = Exhibit.Backwards.Attributes.makeExhibitAttribute; 26 | Exhibit.extractAttributeName = Exhibit.Backwards.Attributes.extractAttributeName; 27 | }; 28 | 29 | /** 30 | * A backwards compatible mechanism for retrieving an Exhibit attribute value. 31 | * @static 32 | * @param {jQuery|Element} elmt 33 | * @param {String} name 34 | * @param {String} splitOn 35 | * @returns {String|Array} 36 | */ 37 | Exhibit.Backwards.Attributes.getAttribute = function(elmt, name, splitOn) { 38 | var value, i, values; 39 | 40 | try { 41 | value = Exhibit.jQuery(elmt).attr(name); 42 | if (typeof value === "undefined" || value === null || value.length === 0) { 43 | value = Exhibit.jQuery(elmt).attr(Exhibit.Backwards.Attributes.prefix+name); 44 | if (typeof value === "undefined" || value === null || value.length === 0) { 45 | return null; 46 | } 47 | } 48 | if (typeof splitOn === "undefined" || splitOn === null) { 49 | return value; 50 | } 51 | values = value.split(splitOn); 52 | for (i = 0; i < values.length; i++) { 53 | values[i] = values[i].trim(); 54 | } 55 | return values; 56 | } catch(e) { 57 | return null; 58 | } 59 | }; 60 | 61 | /** 62 | * A backwards compatible mechanism for retrieving all Exhibit attributes 63 | * on an element. 64 | * @static 65 | * @param {Element} elmt 66 | * @returns {Object} 67 | */ 68 | Exhibit.Backwards.Attributes.extractOptionsFromElement = function(elmt) { 69 | var opts, attrs, i, name, value; 70 | opts = {}; 71 | attrs = elmt.attributes; 72 | for (i in attrs) { 73 | if (attrs.hasOwnProperty(i)) { 74 | name = attrs[i].nodeName; 75 | value = attrs[i].nodeValue; 76 | if (name.indexOf(Exhibit.Backwards.Attributes.prefix) === 0) { 77 | name = name.substring(Exhibit.Backwards.Attributes.prefix.length); 78 | } 79 | opts[name] = value; 80 | } 81 | } 82 | return opts; 83 | }; 84 | 85 | /** 86 | * @static 87 | * @param {String} name 88 | * @returns {Boolean} 89 | */ 90 | Exhibit.Backwards.Attributes.isExhibitAttribute = function(name) { 91 | var prefix = Exhibit.Backwards.Attributes.prefix; 92 | return name.length > prefix.length 93 | && name.startsWith(prefix); 94 | }; 95 | 96 | /** 97 | * @static 98 | * @param {String} name 99 | */ 100 | Exhibit.Backwards.Attributes.extractAttributeName = function(name) { 101 | return name.substr(Exhibit.Backwards.Attributes.prefix.length); 102 | }; 103 | 104 | /** 105 | * @static 106 | * @param {String} name 107 | * @returns {String} 108 | */ 109 | Exhibit.Backwards.Attributes.makeExhibitAttribute = function(name) { 110 | return Exhibit.Backwards.Attributes.prefix + name; 111 | }; 112 | -------------------------------------------------------------------------------- /docs/js/scripts/bc/bc.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @fileOverview General backwards compatibility material. 3 | * @author Ryan Lee 4 | */ 5 | 6 | /** 7 | * @namespace 8 | */ 9 | Exhibit.Backwards = { 10 | "enabled": { 11 | "Attributes": false 12 | } 13 | }; 14 | 15 | /** 16 | * Enable a backwards compatibility module. 17 | * @param {String} module 18 | */ 19 | Exhibit.Backwards.enable = function(module) { 20 | Exhibit.Backwards[module].enable(); 21 | }; 22 | -------------------------------------------------------------------------------- /docs/js/scripts/data/database/type.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @fileOverview Database item type definition. 3 | * @author David Huynh 4 | * @author Ryan Lee 5 | */ 6 | 7 | /** 8 | * Represents an item type. 9 | * 10 | * @public 11 | * @constructor 12 | * @class 13 | * @param {String} id Item type identifier. 14 | */ 15 | Exhibit.Database.Type = function(id) { 16 | this._id = id; 17 | this._custom = {}; 18 | }; 19 | 20 | /** 21 | * Returns the item type identifier. 22 | * 23 | * @returns {String} The item type identifier. 24 | */ 25 | Exhibit.Database.Type.prototype.getID = function() { 26 | return this._id; 27 | }; 28 | 29 | /** 30 | * Returns the item type URI. 31 | * 32 | * @returns {String} The item type URI. 33 | */ 34 | Exhibit.Database.Type.prototype.getURI = function() { 35 | return this._custom["uri"]; 36 | }; 37 | 38 | /** 39 | * Returns the item type user-friendly label. 40 | * 41 | * @returns {String} The item type label. 42 | */ 43 | Exhibit.Database.Type.prototype.getLabel = function() { 44 | return this._custom["label"]; 45 | }; 46 | 47 | /** 48 | * Returns the item type origin. 49 | * 50 | * @returns {String} The item type origin. 51 | */ 52 | Exhibit.Database.Type.prototype.getOrigin = function() { 53 | return this._custom["origin"]; 54 | }; 55 | 56 | /** 57 | * Returns a custom defined item type attribute's value. 58 | * 59 | * @param {String} p The property name. 60 | * @returns {String} The item type attribute's value. 61 | */ 62 | Exhibit.Database.Type.prototype.getProperty = function(p) { 63 | return this._custom[p]; 64 | }; 65 | -------------------------------------------------------------------------------- /docs/js/scripts/data/exporters/bibtex.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @fileOverview Instance of Exhibit.Exporter for BibTex. 3 | * @author David Huynh 4 | * @author Ryan Lee 5 | */ 6 | 7 | /** 8 | * @namespace 9 | */ 10 | Exhibit.Exporter.BibTex = { 11 | /** 12 | * @private 13 | * @constant 14 | */ 15 | _excludeProperties: { 16 | "pub-type": true, 17 | "type": true, 18 | "uri": true, 19 | "key": true 20 | }, 21 | _mimeType: "application/x-bibtex", 22 | exporter: null 23 | }; 24 | 25 | /** 26 | * @param {String} s 27 | * @returns {String} 28 | */ 29 | Exhibit.Exporter.BibTex.wrap = function(s) { 30 | return s; 31 | }; 32 | 33 | /** 34 | * @param {String} s 35 | * @returns {String} 36 | */ 37 | Exhibit.Exporter.BibTex.wrapOne = function(s, first, last) { 38 | return s + "\n"; 39 | }; 40 | 41 | /** 42 | * @param {String} itemID 43 | * @param {Object} o 44 | * @returns {String} 45 | */ 46 | Exhibit.Exporter.BibTex.exportOne = function(itemID, o) { 47 | var type, key, prop, s = ""; 48 | 49 | if (typeof o["pub-type"] !== "undefined") { 50 | type = o["pub-type"]; 51 | } else if (typeof o.type !== "undefined") { 52 | type = o.type; 53 | } 54 | 55 | if (typeof o.key !== "undefined") { 56 | key = o.key; 57 | if (Array.isArray(key)) { 58 | key = key[0]; 59 | } 60 | } else { 61 | key = itemID; 62 | } 63 | 64 | key = key.replace(/[\s,]/g, "-"); 65 | 66 | s += "@" + type + "{" + key + ",\n"; 67 | 68 | for (prop in o) { 69 | if (o.hasOwnProperty(prop)) { 70 | if (typeof Exhibit.Exporter.BibTex._excludeProperties[prop] === "undefined") { 71 | s += "\t" + (prop === "label" ? 72 | "title" : 73 | prop) + " = \""; 74 | s += o[prop].join(" and ") + "\",\n"; 75 | } 76 | } 77 | } 78 | 79 | s += "\torigin = \"" + Exhibit.Persistence.getItemLink(itemID) + "\"\n"; 80 | s += "}\n"; 81 | 82 | return s; 83 | }; 84 | 85 | /** 86 | * @private 87 | */ 88 | Exhibit.Exporter.BibTex._register = function() { 89 | Exhibit.Exporter.BibTex.exporter = new Exhibit.Exporter( 90 | Exhibit.Exporter.BibTex._mimeType, 91 | Exhibit._("%export.bibtexExporterLabel"), 92 | Exhibit.Exporter.BibTex.wrap, 93 | Exhibit.Exporter.BibTex.wrapOne, 94 | Exhibit.Exporter.BibTex.exportOne 95 | ); 96 | }; 97 | 98 | Exhibit.jQuery(document).one("registerExporters.exhibit", 99 | Exhibit.Exporter.BibTex._register); 100 | -------------------------------------------------------------------------------- /docs/js/scripts/data/exporters/html-table.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @fileOverview Instance of Exhibit.Exporter for tab-separated values. 3 | * @author David Huynh 4 | * @author Ryan Lee 5 | */ 6 | 7 | /** 8 | * @namespace 9 | */ 10 | Exhibit.Exporter.HTMLTable = { 11 | _mimeType: "text/html", 12 | exporter: null 13 | }; 14 | 15 | /** 16 | * @param {String} s 17 | * @param {Exhibit.Database} database 18 | * @returns {String} 19 | */ 20 | Exhibit.Exporter.HTMLTable.wrap = function(s, database, props) { 21 | var prop 22 | , $ = Exhibit.jQuery 23 | , header = $(""); 24 | 25 | for (prop in props) { 26 | if (props.hasOwnProperty(prop)) { 27 | $("").text(props[prop].label || prop) 28 | .attr("data-ex-property",prop) 29 | .attr("data-ex-value-type",props[prop].valueType) 30 | .appendTo(header); 31 | } 32 | } 33 | 34 | return "\n" + header.html() 35 | + "\n" + s + "
"; 36 | }; 37 | 38 | /** 39 | * @param {String} s 40 | * @returns {String} 41 | */ 42 | Exhibit.Exporter.HTMLTable.wrapOne = function(s, first, last) { 43 | return s + "\n"; 44 | }; 45 | 46 | /** 47 | * @param {String} itemID 48 | * @param {Object} o 49 | * @returns {String} 50 | */ 51 | Exhibit.Exporter.HTMLTable.exportOne = function(itemID, o, props) { 52 | var prop, $ = Exhibit.jQuery, s = "", fields=$(""); 53 | 54 | for (prop in props) { 55 | if (props.hasOwnProperty(prop)) { 56 | if (o.hasOwnProperty(prop)) { 57 | if (Array.isArray(o[prop])) { 58 | $("").text(o[prop].join(";")).appendTo(fields); 59 | } else { 60 | $("").text(o[prop]).appendTo(fields); 61 | } 62 | } else { 63 | $("").appendTo(fields); 64 | } 65 | } 66 | } 67 | return "" + fields.html() + ""; 68 | }; 69 | 70 | /** 71 | * @private 72 | */ 73 | Exhibit.Exporter.HTMLTable._register = function() { 74 | Exhibit.Exporter.HTMLTable.exporter = new Exhibit.Exporter( 75 | Exhibit.Exporter.HTMLTable._mimeType, 76 | Exhibit._("%export.htmlTableExporterLabel"), 77 | Exhibit.Exporter.HTMLTable.wrap, 78 | Exhibit.Exporter.HTMLTable.wrapOne, 79 | Exhibit.Exporter.HTMLTable.exportOne 80 | ); 81 | }; 82 | 83 | Exhibit.jQuery(document).one("registerExporters.exhibit", 84 | Exhibit.Exporter.HTMLTable._register); 85 | -------------------------------------------------------------------------------- /docs/js/scripts/data/exporters/json.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @fileOverview Instance of Exhibit.Exporter for Exhibit JSON. 3 | * @author David Huynh 4 | * @author Ryan Lee 5 | */ 6 | 7 | /** 8 | * @namespace 9 | */ 10 | Exhibit.Exporter.ExhibitJSON = { 11 | _mimeType: "application/json", 12 | exporter: null 13 | }; 14 | 15 | /** 16 | * @param {String} s 17 | * @returns {String} 18 | */ 19 | Exhibit.Exporter.ExhibitJSON.wrap = function(s) { 20 | return "{\n" + 21 | " \"items\": [\n" + 22 | s + 23 | " ]\n" + 24 | "}\n"; 25 | }; 26 | 27 | /** 28 | * @param {String} s 29 | * @param {Boolean} first 30 | * @param {Boolean} last 31 | * @returns {String} 32 | */ 33 | Exhibit.Exporter.ExhibitJSON.wrapOne = function(s, first, last) { 34 | return s + (last ? "" : ",") +"\n"; 35 | }; 36 | 37 | /** 38 | * @param {String} itemID 39 | * @param {Object} o 40 | * @returns {String} 41 | * @depends JSON 42 | */ 43 | Exhibit.Exporter.ExhibitJSON.exportOne = function(itemID, o) { 44 | return JSON.stringify(o); 45 | }; 46 | 47 | /** 48 | * @private 49 | */ 50 | Exhibit.Exporter.ExhibitJSON._register = function() { 51 | Exhibit.Exporter.ExhibitJSON.exporter = new Exhibit.Exporter( 52 | Exhibit.Exporter.ExhibitJSON._mimeType, 53 | Exhibit._("%export.exhibitJsonExporterLabel"), 54 | Exhibit.Exporter.ExhibitJSON.wrap, 55 | Exhibit.Exporter.ExhibitJSON.wrapOne, 56 | Exhibit.Exporter.ExhibitJSON.exportOne 57 | ); 58 | }; 59 | 60 | Exhibit.jQuery(document).one("registerExporters.exhibit", 61 | Exhibit.Exporter.ExhibitJSON._register); 62 | -------------------------------------------------------------------------------- /docs/js/scripts/data/exporters/rdf-xml.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @fileOverview Instance of Exhibit.Exporter for RDF/XML. 3 | * @author David Huynh 4 | * @author Ryan Lee 5 | */ 6 | 7 | /** 8 | * @namespace 9 | */ 10 | Exhibit.Exporter.RDFXML = { 11 | _mimeType: "application/rdf+xml", 12 | exporter: null 13 | }; 14 | 15 | /** 16 | * @param {String} s 17 | * @param {Object} prefixToBase 18 | * @returns {String} 19 | */ 20 | Exhibit.Exporter.RDFXML.wrap = function(s, prefixToBase) { 21 | var s2, prefix; 22 | 23 | s2 = "\n" + 24 | "\n"; 34 | 35 | return s2; 36 | }; 37 | 38 | /** 39 | * @param {String} s 40 | * @returns {String} 41 | */ 42 | Exhibit.Exporter.RDFXML.wrapOne = function(s, first, last) { 43 | return s + "\n"; 44 | }; 45 | 46 | /** 47 | * @param {String} itemID 48 | * @param {Object} o 49 | * @param {Object} properties 50 | * @param {Object} propertyIDToQualifiedName 51 | * @param {Object} prefixToBase 52 | * @returns {String} 53 | */ 54 | Exhibit.Exporter.RDFXML.exportOne = function(itemID, o, properties, propertyIDToQualifiedName, prefixToBase) { 55 | var s = "", uri, i, propertyID, valueType, propertyString, j, values; 56 | uri = o["uri"]; 57 | s += "\n"; 58 | 59 | for (propertyID in o) { 60 | if (o.hasOwnProperty(propertyID) && typeof properties[propertyID] !== "undefined") { 61 | valueType = properties[propertyID].valueType; 62 | if (typeof propertyIDToQualifiedName[propertyID] !== "undefined") { 63 | qname = propertyIDToQualifiedName[propertyID]; 64 | propertyString = qname.prefix + ":" + qname.localName; 65 | } else { 66 | propertyString = properties[propertyID].uri; 67 | } 68 | 69 | if (valueType === "item") { 70 | values = o[propertyID]; 71 | for (j = 0; j < values.length; j++) { 72 | s += "\t<" + propertyString + " rdf:resource=\"" + values[j] + "\" />\n"; 73 | } 74 | } else if (propertyID !== "uri") { 75 | values = o[propertyID]; 76 | for (j = 0; j < values.length; j++) { 77 | s += "\t<" + propertyString + ">" + values[j] + "\n"; 78 | } 79 | } 80 | } 81 | } 82 | 83 | s += "\t" + Exhibit.Persistence.getItemLink(itemID) + "\n"; 84 | s += ""; 85 | 86 | return s; 87 | }; 88 | 89 | Exhibit.Exporter.RDFXML.exportMany = function(set, database) { 90 | var propertyIDToQualifiedName, prefixToBase, s, self, properties, ps, i, p; 91 | propertyIDToQualifiedName = {}; 92 | prefixToBase = {}; 93 | s = ""; 94 | self = this; 95 | database.getNamespaces(propertyIDToQualifiedName, prefixToBase); 96 | properties = {}; 97 | ps = database.getAllProperties(); 98 | for (i = 0; i < ps.length; i++) { 99 | p = database.getProperty(ps[i]); 100 | properties[ps[i]] = {} 101 | properties[ps[i]].valueType = p.getValueType(); 102 | properties[ps[i]].uri = p.getURI(); 103 | } 104 | set.visit(function(itemID) { 105 | s += self._wrapOne(self._exportOne( 106 | itemID, 107 | self.exportOneFromDatabase(itemID, database), 108 | properties, 109 | propertyIDToQualifiedName, 110 | prefixToBase 111 | )); 112 | }); 113 | return this._wrap(s, prefixToBase); 114 | }; 115 | 116 | /** 117 | * @private 118 | */ 119 | Exhibit.Exporter.RDFXML._register = function() { 120 | Exhibit.Exporter.RDFXML.exporter = new Exhibit.Exporter( 121 | Exhibit.Exporter.RDFXML._mimeType, 122 | Exhibit._("%export.rdfXmlExporterLabel"), 123 | Exhibit.Exporter.RDFXML.wrap, 124 | Exhibit.Exporter.RDFXML.wrapOne, 125 | Exhibit.Exporter.RDFXML.exportOne, 126 | Exhibit.Exporter.RDFXML.exportMany 127 | ); 128 | }; 129 | 130 | Exhibit.jQuery(document).one("registerExporters.exhibit", 131 | Exhibit.Exporter.RDFXML._register); 132 | -------------------------------------------------------------------------------- /docs/js/scripts/data/exporters/semantic-wikitext.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @fileOverview Instance of Exhibit.Exporter for Semantic MediaWiki text. 3 | * @author David Huynh 4 | * @author Ryan Lee 5 | */ 6 | 7 | /** 8 | * @namespace 9 | */ 10 | Exhibit.Exporter.SemanticWikiText = { 11 | _type: "semantic-mediawiki", 12 | exporter: null 13 | }; 14 | 15 | /** 16 | * @param {String} s 17 | * @param {Exhibit.Database} database 18 | * @returns {String} 19 | */ 20 | Exhibit.Exporter.SemanticWikiText.wrap = function(s, database) { 21 | return s; 22 | }; 23 | 24 | /** 25 | * @param {String} s 26 | * @returns {String} 27 | */ 28 | Exhibit.Exporter.SemanticWikiText.wrapOne = function(s, first, last) { 29 | return s + "\n"; 30 | }; 31 | 32 | /** 33 | * @param {String} itemID 34 | * @param {Object} o 35 | * @param {Object} properties 36 | * @returns {String} 37 | */ 38 | Exhibit.Exporter.SemanticWikiText.exportOne = function(itemID, o, properties) { 39 | var uri, prop, valueType, values, i, s = ""; 40 | 41 | uri = o.uri; 42 | s += uri + "\n"; 43 | 44 | for (prop in o) { 45 | if (o.hasOwnProperty(prop) && typeof properties[prop] !== "undefined") { 46 | valueType = properties[prop].valueType; 47 | values = o[prop]; 48 | if (valueType === "item") { 49 | for (i = 0; i < values.length; i++) { 50 | s += "[[" + prop + "::" + values[i] + "]]\n"; 51 | } 52 | } else { 53 | for (i = 0; i < values.length; i++) { 54 | s += "[[" + prop + ":=" + values[i] + "]]\n"; 55 | } 56 | } 57 | } 58 | } 59 | 60 | s += "[[origin:=" + Exhibit.Persistence.getItemLink(itemID) + "]]\n\n"; 61 | 62 | return s; 63 | }; 64 | 65 | /** 66 | * @private 67 | */ 68 | Exhibit.Exporter.SemanticWikiText._register = function() { 69 | Exhibit.Exporter.SemanticWikiText.exporter = new Exhibit.Exporter( 70 | Exhibit.Exporter.SemanticWikiText._type, 71 | Exhibit._("%export.smwExporterLabel"), 72 | Exhibit.Exporter.SemanticWikiText.wrap, 73 | Exhibit.Exporter.SemanticWikiText.wrapOne, 74 | Exhibit.Exporter.SemanticWikiText.exportOne 75 | ); 76 | }; 77 | 78 | Exhibit.jQuery(document).one("registerExporters.exhibit", 79 | Exhibit.Exporter.SemanticWikiText._register); 80 | -------------------------------------------------------------------------------- /docs/js/scripts/data/exporters/tsv.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @fileOverview Instance of Exhibit.Exporter for tab-separated values. 3 | * @author David Huynh 4 | * @author Ryan Lee 5 | */ 6 | 7 | /** 8 | * @namespace 9 | */ 10 | Exhibit.Exporter.TSV = { 11 | _mimeType: "text/tab-separated-values", 12 | exporter: null 13 | }; 14 | 15 | /** 16 | * @param {String} s 17 | * @param {Exhibit.Database} database 18 | * @returns {String} 19 | */ 20 | Exhibit.Exporter.TSV.wrap = function(s, database, props) { 21 | var header, prop, propertyID, property, valueType; 22 | 23 | header = []; 24 | 25 | for (prop in props) { 26 | if (props.hasOwnProperty(prop)) { 27 | valueType = props[prop].valueType; 28 | header.push(prop + ":" + valueType); 29 | } 30 | } 31 | 32 | return header.join("\t") + "\n" + s; 33 | }; 34 | 35 | /** 36 | * @param {String} s 37 | * @returns {String} 38 | */ 39 | Exhibit.Exporter.TSV.wrapOne = function(s, first, last) { 40 | return s + "\n"; 41 | }; 42 | 43 | /** 44 | * @param {String} itemID 45 | * @param {Object} o 46 | * @returns {String} 47 | */ 48 | Exhibit.Exporter.TSV.exportOne = function(itemID, o, props) { 49 | var prop, s = "", fields=[]; 50 | 51 | for (prop in props) { 52 | if (props.hasOwnProperty(prop)) { 53 | if (o.hasOwnProperty(prop)) { 54 | if (Array.isArray(o[prop])) { 55 | fields.push(o[prop].join(";")); 56 | } else { 57 | fields.push(o[prop]); 58 | } 59 | } else { 60 | fields.push(""); 61 | } 62 | } 63 | } 64 | return fields.join("\t"); 65 | }; 66 | 67 | /** 68 | * @private 69 | */ 70 | Exhibit.Exporter.TSV._register = function() { 71 | Exhibit.Exporter.TSV.exporter = new Exhibit.Exporter( 72 | Exhibit.Exporter.TSV._mimeType, 73 | Exhibit._("%export.tsvExporterLabel"), 74 | Exhibit.Exporter.TSV.wrap, 75 | Exhibit.Exporter.TSV.wrapOne, 76 | Exhibit.Exporter.TSV.exportOne 77 | ); 78 | }; 79 | 80 | Exhibit.jQuery(document).one("registerExporters.exhibit", 81 | Exhibit.Exporter.TSV._register); 82 | -------------------------------------------------------------------------------- /docs/js/scripts/data/expression.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @fileOverview Base class for database query language. 3 | * @author David Huynh 4 | * @author Ryan Lee 5 | */ 6 | 7 | /** 8 | * @namespace 9 | */ 10 | Exhibit.Expression = {}; 11 | 12 | /** 13 | * @class 14 | * @constructor 15 | * @public 16 | * @param {Exhibit.Expression.Path} rootNode 17 | */ 18 | Exhibit.Expression._Impl = function(rootNode) { 19 | this._rootNode = rootNode; 20 | }; 21 | 22 | /** 23 | * @param {Object} roots 24 | * @param {Object} rootValueTypes 25 | * @param {String} defaultRootName 26 | * @param {Exhibit.Database} database 27 | * @returns {Object} 28 | */ 29 | Exhibit.Expression._Impl.prototype.evaluate = function( 30 | roots, 31 | rootValueTypes, 32 | defaultRootName, 33 | database 34 | ) { 35 | var collection = this._rootNode.evaluate(roots, rootValueTypes, defaultRootName, database); 36 | return { 37 | values: collection.getSet(), 38 | valueType: collection.valueType, 39 | size: collection.size 40 | }; 41 | }; 42 | 43 | /** 44 | * @param {String} itemID 45 | * @param {Exhibit.Database} database 46 | * @returns {Object} 47 | */ 48 | Exhibit.Expression._Impl.prototype.evaluateOnItem = function(itemID, database) { 49 | return this.evaluate( 50 | { "value" : itemID }, 51 | { "value" : "item" }, 52 | "value", 53 | database 54 | ); 55 | }; 56 | 57 | /** 58 | * @param {Object} roots 59 | * @param {Object} rootValueTypes 60 | * @param {String} defaultRootName 61 | * @param {Exhibit.Database} database 62 | * @returns {Object} 63 | */ 64 | Exhibit.Expression._Impl.prototype.evaluateSingle = function( 65 | roots, 66 | rootValueTypes, 67 | defaultRootName, 68 | database 69 | ) { 70 | var collection, result; 71 | collection = this._rootNode.evaluate(roots, rootValueTypes, defaultRootName, database); 72 | result = { value: null, 73 | valueType: collection.valueType }; 74 | collection.forEachValue(function(v) { 75 | result.value = v; 76 | return true; 77 | }); 78 | 79 | return result; 80 | }; 81 | 82 | /** 83 | * @param {String} itemID 84 | * @param {Exhibit.Database} database 85 | * @returns {Object} 86 | */ 87 | Exhibit.Expression._Impl.prototype.evaluateSingleOnItem = function(itemID, database) { 88 | return this.evaluateSingle( 89 | { "value" : itemID }, 90 | { "value" : "item" }, 91 | "value", 92 | database 93 | ); 94 | }; 95 | 96 | /** 97 | * @param {Object} roots 98 | * @param {Object} rootValueTypes 99 | * @param {String} defaultRootName 100 | * @param {Exhibit.Database} database 101 | * @returns {Boolean} 102 | */ 103 | Exhibit.Expression._Impl.prototype.testExists = function( 104 | roots, 105 | rootValueTypes, 106 | defaultRootName, 107 | database 108 | ) { 109 | return this.isPath() ? 110 | this._rootNode.testExists(roots, rootValueTypes, defaultRootName, database) : 111 | this.evaluate(roots, rootValueTypes, defaultRootName, database).values.size() > 0; 112 | }; 113 | 114 | /** 115 | * @returns {Boolean} 116 | */ 117 | Exhibit.Expression._Impl.prototype.isPath = function() { 118 | return this._rootNode instanceof Exhibit.Expression.Path; 119 | }; 120 | 121 | /** 122 | * @returns {Exhibit.Expression.Path} 123 | */ 124 | Exhibit.Expression._Impl.prototype.getPath = function() { 125 | return this.isPath() ? 126 | this._rootNode : 127 | null; 128 | }; 129 | -------------------------------------------------------------------------------- /docs/js/scripts/data/expression/collection.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @fileOverview 3 | * @author David Huynh 4 | * @author Ryan Lee 5 | */ 6 | 7 | /** 8 | * @class 9 | * @constructor 10 | * @param {Array|Exhibit.Set} values 11 | * @param {String} valueType 12 | */ 13 | Exhibit.Expression._Collection = function(values, valueType) { 14 | this._values = values; 15 | this.valueType = valueType; 16 | 17 | if (values instanceof Array) { 18 | this.forEachValue = Exhibit.Expression._Collection._forEachValueInArray; 19 | this.getSet = Exhibit.Expression._Collection._getSetFromArray; 20 | this.contains = Exhibit.Expression._Collection._containsInArray; 21 | this.size = values.length; 22 | } else { 23 | this.forEachValue = Exhibit.Expression._Collection._forEachValueInSet; 24 | this.getSet = Exhibit.Expression._Collection._getSetFromSet; 25 | this.contains = Exhibit.Expression._Collection._containsInSet; 26 | this.size = values.size(); 27 | } 28 | }; 29 | 30 | /** 31 | * @param {Function} f 32 | */ 33 | Exhibit.Expression._Collection._forEachValueInSet = function(f) { 34 | this._values.visit(f); 35 | }; 36 | 37 | /** 38 | * @param {Function} f 39 | */ 40 | Exhibit.Expression._Collection._forEachValueInArray = function(f) { 41 | var a, i; 42 | a = this._values; 43 | for (i = 0; i < a.length; i++) { 44 | if (f(a[i])) { 45 | break; 46 | } 47 | } 48 | }; 49 | 50 | /** 51 | * @returns {Exhibit.Set} 52 | */ 53 | Exhibit.Expression._Collection._getSetFromSet = function() { 54 | return this._values; 55 | }; 56 | 57 | /** 58 | * @returns {Exhibit.Set} 59 | */ 60 | Exhibit.Expression._Collection._getSetFromArray = function() { 61 | return new Exhibit.Set(this._values); 62 | }; 63 | 64 | /** 65 | * @param {String|Number} v 66 | * @returns {Boolean} 67 | */ 68 | Exhibit.Expression._Collection._containsInSet = function(v) { 69 | return this._values.contains(v); 70 | }; 71 | 72 | /** 73 | * @param {String|Number} v 74 | * @returns {Boolean} 75 | */ 76 | Exhibit.Expression._Collection._containsInArray = function(v) { 77 | var a, i; 78 | a = this._values; 79 | for (i = 0; i < a.length; i++) { 80 | if (a[i] === v) { 81 | return true; 82 | } 83 | } 84 | return false; 85 | }; 86 | -------------------------------------------------------------------------------- /docs/js/scripts/data/expression/constant.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @fileOverview 3 | * @author David Huynh 4 | * @author Ryan Lee 5 | */ 6 | 7 | /** 8 | * @class 9 | * @constructor 10 | * @public 11 | * @param {String|Number} value 12 | * @param {String} valueType 13 | */ 14 | Exhibit.Expression._Constant = function(value, valueType) { 15 | this._value = value; 16 | this._valueType = valueType; 17 | }; 18 | 19 | /** 20 | * @param {Object} roots 21 | * @param {Object} rootValueTypes 22 | * @param {String} defaultRootName 23 | * @param {Exhibit.Database} database 24 | * @returns {Exhibit.Expression._Collection} 25 | */ 26 | Exhibit.Expression._Constant.prototype.evaluate = function( 27 | roots, 28 | rootValueTypes, 29 | defaultRootName, 30 | database 31 | ) { 32 | return new Exhibit.Expression._Collection([ this._value ], this._valueType); 33 | }; 34 | -------------------------------------------------------------------------------- /docs/js/scripts/data/expression/control-call.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @fileOverview 3 | * @author David Huynh 4 | * @author Ryan Lee 5 | */ 6 | 7 | /** 8 | * @class 9 | * @constructor 10 | * @public 11 | * @param {String} name 12 | * @param {Array} args 13 | */ 14 | Exhibit.Expression._ControlCall = function(name, args) { 15 | this._name = name; 16 | this._args = args; 17 | }; 18 | 19 | /** 20 | * @param {Object} roots 21 | * @param {Object} rootValueTypes 22 | * @param {String} defaultRootName 23 | * @param {Exhibit.Database} database 24 | * @returns {Exhibit.Expression._Collection} 25 | */ 26 | Exhibit.Expression._ControlCall.prototype.evaluate = function( 27 | roots, 28 | rootValueTypes, 29 | defaultRootName, 30 | database 31 | ) { 32 | return Exhibit.Controls[this._name].f(this._args, roots, rootValueTypes, defaultRootName, database); 33 | }; 34 | -------------------------------------------------------------------------------- /docs/js/scripts/data/expression/controls.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @fileOverview Implementation of query language control features. 3 | * @author David Huynh 4 | * @author Ryan Lee 5 | */ 6 | 7 | /** 8 | * @namespace 9 | */ 10 | Exhibit.Controls = {}; 11 | 12 | Exhibit.Controls["if"] = { 13 | f: function( 14 | args, 15 | roots, 16 | rootValueTypes, 17 | defaultRootName, 18 | database 19 | ) { 20 | var conditionCollection = args[0].evaluate(roots, rootValueTypes, defaultRootName, database), condition; 21 | condition = false; 22 | conditionCollection.forEachValue(function(v) { 23 | if (v) { 24 | condition = true; 25 | return true; 26 | } 27 | }); 28 | 29 | if (condition) { 30 | return args[1].evaluate(roots, rootValueTypes, defaultRootName, database); 31 | } else { 32 | return args[2].evaluate(roots, rootValueTypes, defaultRootName, database); 33 | } 34 | } 35 | }; 36 | 37 | Exhibit.Controls["foreach"] = { 38 | f: function( 39 | args, 40 | roots, 41 | rootValueTypes, 42 | defaultRootName, 43 | database 44 | ) { 45 | var collection, oldValue, oldValueType, results, valueType; 46 | collection = args[0].evaluate(roots, rootValueTypes, defaultRootName, database); 47 | 48 | oldValue = roots["value"]; 49 | oldValueType = rootValueTypes["value"]; 50 | rootValueTypes["value"] = collection.valueType; 51 | 52 | results = []; 53 | valueType = "text"; 54 | 55 | collection.forEachValue(function(element) { 56 | roots["value"] = element; 57 | 58 | var collection2 = args[1].evaluate(roots, rootValueTypes, defaultRootName, database); 59 | valueType = collection2.valueType; 60 | 61 | collection2.forEachValue(function(result) { 62 | results.push(result); 63 | }); 64 | }); 65 | 66 | roots["value"] = oldValue; 67 | rootValueTypes["value"] = oldValueType; 68 | 69 | return new Exhibit.Expression._Collection(results, valueType); 70 | } 71 | }; 72 | 73 | Exhibit.Controls["default"] = { 74 | f: function( 75 | args, 76 | roots, 77 | rootValueTypes, 78 | defaultRootName, 79 | database 80 | ) { 81 | var i, collection; 82 | for (i = 0; i < args.length; i++) { 83 | collection = args[i].evaluate(roots, rootValueTypes, defaultRootName, database); 84 | if (collection.size > 0) { 85 | return collection; 86 | } 87 | } 88 | return new Exhibit.Expression._Collection([], "text"); 89 | } 90 | }; 91 | 92 | Exhibit.Controls["filter"] = { 93 | f: function( 94 | args, 95 | roots, 96 | rootValueTypes, 97 | defaultRootName, 98 | database 99 | ) { 100 | var collection, oldValue, oldValueType, results; 101 | collection = args[0].evaluate(roots, rootValueTypes, defaultRootName, database); 102 | 103 | oldValue = roots["value"]; 104 | oldValueType = rootValueTypes["value"]; 105 | 106 | results = new Exhibit.Set(); 107 | rootValueTypes["value"] = collection.valueType; 108 | 109 | collection.forEachValue(function(element) { 110 | roots["value"] = element; 111 | 112 | var collection2 = args[1].evaluate(roots, rootValueTypes, defaultRootName, database); 113 | if (collection2.size > 0 && collection2.contains(true)) { 114 | results.add(element); 115 | } 116 | }); 117 | 118 | roots["value"] = oldValue; 119 | rootValueTypes["value"] = oldValueType; 120 | 121 | return new Exhibit.Expression._Collection(results, collection.valueType); 122 | } 123 | }; 124 | -------------------------------------------------------------------------------- /docs/js/scripts/data/expression/function-call.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @fileOverview 3 | * @author David Huynh 4 | * @author Ryan Lee 5 | */ 6 | 7 | /** 8 | * @class 9 | * @constructor 10 | * @public 11 | * @param {String} name 12 | * @param {Array} args 13 | */ 14 | Exhibit.Expression._FunctionCall = function(name, args) { 15 | this._name = name; 16 | this._args = args; 17 | }; 18 | 19 | /** 20 | * @param {Object} roots 21 | * @param {Object} rootValueTypes 22 | * @param {String} defaultRootName 23 | * @param {Exhibit.Database} database 24 | * @returns {Exhibit.Expression._Collection} 25 | * @throws Error 26 | */ 27 | Exhibit.Expression._FunctionCall.prototype.evaluate = function( 28 | roots, 29 | rootValueTypes, 30 | defaultRootName, 31 | database 32 | ) { 33 | var args = [], i; 34 | for (i = 0; i < this._args.length; i++) { 35 | args.push(this._args[i].evaluate(roots, rootValueTypes, defaultRootName, database)); 36 | } 37 | 38 | if (typeof Exhibit.Functions[this._name] !== "undefined") { 39 | return Exhibit.Functions[this._name].f(args); 40 | } else { 41 | throw new Error(Exhibit._("%expression.noSuchFunction", this._name)); 42 | } 43 | }; 44 | -------------------------------------------------------------------------------- /docs/js/scripts/data/expression/operator.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @fileOverview 3 | * @author David Huynh 4 | * @author Ryan Lee 5 | */ 6 | 7 | /** 8 | * @class 9 | * @constructor 10 | * @public 11 | * @param {String} operator 12 | * @param {Array} args 13 | */ 14 | Exhibit.Expression._Operator = function(operator, args) { 15 | this._operator = operator; 16 | this._args = args; 17 | }; 18 | 19 | /** 20 | * @param {Object} roots 21 | * @param {Object} rootValueTypes 22 | * @param {String} defaultRootName 23 | * @param {Exhibit.Database} database 24 | * @returns {Exhibit.Expression._Collection} 25 | */ 26 | Exhibit.Expression._Operator.prototype.evaluate = function( 27 | roots, 28 | rootValueTypes, 29 | defaultRootName, 30 | database 31 | ) { 32 | var values = [], args = [], i, operator, f; 33 | 34 | for (i = 0; i < this._args.length; i++) { 35 | args.push(this._args[i].evaluate(roots, rootValueTypes, defaultRootName, database)); 36 | } 37 | 38 | operator = Exhibit.Expression._operators[this._operator]; 39 | f = operator.f; 40 | if (operator.argumentType === "number") { 41 | args[0].forEachValue(function(v1) { 42 | if (typeof v1 !== "number") { 43 | v1 = parseFloat(v1); 44 | } 45 | 46 | args[1].forEachValue(function(v2) { 47 | if (typeof v2 !== "number") { 48 | v2 = parseFloat(v2); 49 | } 50 | 51 | values.push(f(v1, v2)); 52 | }); 53 | }); 54 | } else { 55 | args[0].forEachValue(function(v1) { 56 | args[1].forEachValue(function(v2) { 57 | values.push(f(v1, v2)); 58 | }); 59 | }); 60 | } 61 | 62 | return new Exhibit.Expression._Collection(values, operator.valueType); 63 | }; 64 | 65 | /** 66 | * @private 67 | */ 68 | Exhibit.Expression._operators = { 69 | "+" : { 70 | argumentType: "number", 71 | valueType: "number", 72 | /** @ignore */ 73 | f: function(a, b) { return a + b; } 74 | }, 75 | "-" : { 76 | argumentType: "number", 77 | valueType: "number", 78 | /** @ignore */ 79 | f: function(a, b) { return a - b; } 80 | }, 81 | "*" : { 82 | argumentType: "number", 83 | valueType: "number", 84 | /** @ignore */ 85 | f: function(a, b) { return a * b; } 86 | }, 87 | "/" : { 88 | argumentType: "number", 89 | valueType: "number", 90 | /** @ignore */ 91 | f: function(a, b) { return a / b; } 92 | }, 93 | "=" : { 94 | valueType: "boolean", 95 | /** @ignore */ 96 | f: function(a, b) { return a === b; } 97 | }, 98 | "<>" : { 99 | valueType: "boolean", 100 | /** @ignore */ 101 | f: function(a, b) { return a !== b; } 102 | }, 103 | "><" : { 104 | valueType: "boolean", 105 | /** @ignore */ 106 | f: function(a, b) { return a !== b; } 107 | }, 108 | "<" : { 109 | argumentType: "number", 110 | valueType: "boolean", 111 | /** @ignore */ 112 | f: function(a, b) { return a < b; } 113 | }, 114 | ">" : { 115 | argumentType: "number", 116 | valueType: "boolean", 117 | /** @ignore */ 118 | f: function(a, b) { return a > b; } 119 | }, 120 | "<=" : { 121 | argumentType: "number", 122 | valueType: "boolean", 123 | /** @ignore */ 124 | f: function(a, b) { return a <= b; } 125 | }, 126 | ">=" : { 127 | argumentType: "number", 128 | valueType: "boolean", 129 | /** @ignore */ 130 | f: function(a, b) { return a >= b; } 131 | } 132 | }; 133 | -------------------------------------------------------------------------------- /docs/js/scripts/data/importers/babel-based.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @fileOverview Babel service-based data conversion and import. 3 | * @author David Huynh 4 | * @author Ryan Lee 5 | */ 6 | 7 | /** 8 | * @namespace 9 | */ 10 | Exhibit.Importer.BabelBased = { 11 | _importer: null, 12 | 13 | _mimeTypeToReader: { 14 | "application/rdf+xml" : "rdf-xml", 15 | "application/n3" : "n3", 16 | 17 | "application/msexcel" : "xls", 18 | "application/x-msexcel" : "xls", 19 | "application/x-ms-excel" : "xls", 20 | "application/vnd.ms-excel" : "xls", 21 | "application/x-excel" : "xls", 22 | "application/xls" : "xls", 23 | "application/x-xls" : "xls", 24 | 25 | "application/x-bibtex" : "bibtex" 26 | }, 27 | 28 | _translatorPrefix: (typeof Exhibit.babelPrefix !== "undefined") ? 29 | Exhibit.babelPrefix + "translator?" : 30 | undefined 31 | }; 32 | 33 | /** 34 | * @param {String} url 35 | * @param {Object} s 36 | * @param {Function} callback 37 | */ 38 | Exhibit.Importer.BabelBased.parse = function(url, s, callback) { 39 | if (typeof callback === "function") { 40 | callback(s); 41 | } 42 | }; 43 | 44 | /** 45 | * @param {String} url 46 | * @param {String} mimeType 47 | * @returns {String} 48 | */ 49 | Exhibit.Importer.BabelBased.makeURL = function(url, mimeType) { 50 | if (typeof Exhibit.Importer.BabelBased._translatorPrefix === "undefined") { 51 | return null; 52 | } 53 | 54 | var reader, writer; 55 | reader = Exhibit.Importer.BabelBased._defaultReader; 56 | writer = Exhibit.Importer.BabelBased._defaultWriter; 57 | 58 | if (typeof Exhibit.Importer.BabelBased._mimeTypeToReader[mimeType] !== "undefined") { 59 | reader = Exhibit.Importer.BabelBased._mimeTypeToReader[mimeType]; 60 | } 61 | 62 | if (reader === "bibtex") { 63 | writer = "bibtex-exhibit-jsonp"; 64 | } 65 | 66 | return Exhibit.Importer.BabelBased._translatorPrefix + [ 67 | "reader=" + reader, 68 | "writer=" + writer, 69 | "url=" + encodeURIComponent(url) 70 | ].join("&"); 71 | }; 72 | 73 | /** 74 | * @private 75 | * @static 76 | * @param {jQuery.Event} evt 77 | * @param {Exhibit.Registry} reg 78 | */ 79 | Exhibit.Importer.BabelBased._register = function(evt, reg) { 80 | if (typeof Exhibit.Importer.BabelBased._translatorPrefix === "undefined") { 81 | return; 82 | } 83 | 84 | var types, type; 85 | types = []; 86 | for (type in Exhibit.Importer.BabelBased._mimeTypeToReader) { 87 | if (Exhibit.Importer.BabelBased._mimeTypeToReader.hasOwnProperty(type)) { 88 | types.push(type); 89 | } 90 | } 91 | 92 | Exhibit.Importer.BabelBased._importer = new Exhibit.Importer( 93 | types, 94 | "babel", 95 | Exhibit.Importer.BabelBased.parse 96 | ); 97 | }; 98 | 99 | Exhibit.jQuery(document).one( 100 | "registerImporters.exhibit", 101 | Exhibit.Importer.BabelBased._register 102 | ); 103 | -------------------------------------------------------------------------------- /docs/js/scripts/data/importers/json.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @fileOverview 3 | * @author David Huynh 4 | * @author Ryan Lee 5 | */ 6 | 7 | /** 8 | * @namespace 9 | */ 10 | Exhibit.Importer.ExhibitJSON = { 11 | _importer: null 12 | }; 13 | 14 | /** 15 | * @param {String} url 16 | * @param {String} s 17 | * @param {Function} callback 18 | * @depends JSON 19 | */ 20 | Exhibit.Importer.ExhibitJSON.parse = function(url, s, callback) { 21 | var o = null; 22 | 23 | try { 24 | o = JSON.parse(s); 25 | } catch(e) { 26 | Exhibit.UI.showJsonFileValidation(Exhibit._("%general.badJsonMessage", url, e.message), url); 27 | } 28 | 29 | if (typeof callback === "function") { 30 | callback(o); 31 | } 32 | }; 33 | 34 | /** 35 | * @private 36 | */ 37 | Exhibit.Importer.ExhibitJSON._register = function() { 38 | Exhibit.Importer.ExhibitJSON._importer = new Exhibit.Importer( 39 | "application/json", 40 | "get", 41 | Exhibit.Importer.ExhibitJSON.parse 42 | ); 43 | }; 44 | 45 | Exhibit.jQuery(document).one("registerImporters.exhibit", 46 | Exhibit.Importer.ExhibitJSON._register); 47 | -------------------------------------------------------------------------------- /docs/js/scripts/data/importers/jsonp.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @fileOverview Handle generic JSONP importing. 3 | * @author David Huynh 4 | * @author Ryan Lee 5 | */ 6 | 7 | /** 8 | * @namespace 9 | */ 10 | Exhibit.Importer.JSONP = { 11 | _importer: null, 12 | _registryKey: "jsonpImporter" 13 | }; 14 | 15 | /** 16 | * @param {String} url 17 | * @param {Object} s 18 | * @param {Function} callback 19 | */ 20 | Exhibit.Importer.JSONP.parse = function(url, s, callback) { 21 | if (typeof callback === "function") { 22 | callback(s); 23 | } 24 | }; 25 | 26 | /** 27 | * A generic JSONP feed converter to Exhibit JSON. 28 | * Does 90% of the feed conversion for 90% of all (well designed) JSONP feeds. 29 | * Pass the raw json object, an optional index to drill into to get at the 30 | * array of items ("feed.entry", in the case of Google Spreadsheets -- pass 31 | * null, if the array is already the top container, as in a Del.icio.us feed), 32 | * an object mapping the wanted item property name to the properties to pick 33 | * them up from, and an optional similar mapping with conversion callbacks to 34 | * perform on the data value before storing it in the item property. These 35 | * callback functions are invoked with the value, the object it was picked up 36 | * from, its index in the items array, the items array and the feed as a whole 37 | * (for the cases where you need to look up properties from the surroundings). 38 | * Returning the undefined value your converter means the property is not set. 39 | * 40 | * @param {Object} json Result of JSONP call 41 | * @param {String} index 42 | * @param {Object} mapping 43 | * @param {Object} converters 44 | * @returns {Object} 45 | */ 46 | Exhibit.Importer.JSONP.transformJSON = function(json, index, mapping, converters) { 47 | var objects, items, i, object, item, name, index, property; 48 | objects = json; 49 | items = []; 50 | if (typeof index !== "undefined" && index !== null) { 51 | index = index.split("."); 52 | while (index.length > 0) { 53 | objects = objects[index.shift()]; 54 | } 55 | } 56 | for (i = 0, object = objects[i]; i < objects.length; i++) { 57 | item = {}; 58 | for (name in mapping) { 59 | if (mapping.hasOwnProperty(name)) { 60 | index = mapping[name]; 61 | // gracefully handle poisoned Object.prototype 62 | if (!mapping.hasOwnProperty(name) || 63 | !object.hasOwnProperty(index)) { 64 | continue; 65 | } 66 | 67 | property = object[index]; 68 | if (typeof converters !== "undefined" 69 | && converters !== null 70 | && converters.hasOwnProperty(name)) { 71 | property = converters[name](property, object, i, objects, json); 72 | } 73 | if (typeof property !== "undefined") { 74 | item[name] = property; 75 | } 76 | } 77 | } 78 | items.push(item); 79 | } 80 | return items; 81 | }; 82 | 83 | /** 84 | * @private 85 | * @static 86 | * @param {jQuery.Event} evt 87 | * @param {Exhibit.Registry} reg 88 | */ 89 | Exhibit.Importer.JSONP._register = function(evt, reg) { 90 | Exhibit.Importer.JSONP._importer = new Exhibit.Importer( 91 | "application/jsonp", 92 | "jsonp", 93 | Exhibit.Importer.JSONP.parse 94 | ); 95 | if (!reg.hasRegistry(Exhibit.Importer.JSONP._registryKey)) { 96 | reg.createRegistry(Exhibit.Importer.JSONP._registryKey); 97 | Exhibit.jQuery(document).trigger( 98 | "registerJSONPImporters.exhibit", 99 | reg 100 | ); 101 | } 102 | }; 103 | 104 | Exhibit.jQuery(document).one( 105 | "registerImporters.exhibit", 106 | Exhibit.Importer.JSONP._register 107 | ); 108 | -------------------------------------------------------------------------------- /docs/js/scripts/final.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @fileOverview Load locales, any dynamic post-script loading activities. 3 | */ 4 | 5 | Exhibit.jQuery(document).ready(function() { 6 | var delays, localeLoaded; 7 | // Without threading, this shouldn't introduce a race condition, 8 | // but it is definitely a problem if concurrency comes into play. 9 | // Maybe refactoring so everything uses the delay queue under the hood 10 | // would make more sense. 11 | delays = []; 12 | localeLoaded = false; 13 | 14 | Exhibit.jQuery(document).bind("delayCreation.exhibit", function(evt, delayID) { 15 | delays.push(delayID); 16 | }); 17 | 18 | Exhibit.jQuery(document).bind("delayFinished.exhibit", function(evt, delayID) { 19 | var idx = delays.indexOf(delayID); 20 | if (idx >= 0) { 21 | delays.splice(idx, 1); 22 | if (delays.length === 0 && localeLoaded) { 23 | delays = null; 24 | Exhibit.jQuery(document).trigger("scriptsLoaded.exhibit"); 25 | } 26 | } 27 | }); 28 | 29 | Exhibit.jQuery(document).bind("localeSet.exhibit", function(evt, localeURLs) { 30 | var i; 31 | for (i = 0; i < localeURLs.length; i++) { 32 | Exhibit.includeJavascriptFile(null, localeURLs[i]); 33 | } 34 | Exhibit.jQuery(document).trigger("loadExtensions.exhibit"); 35 | }); 36 | 37 | Exhibit.jQuery(document).bind("error.exhibit", function(evt, e, msg) { 38 | Exhibit.UI.hideBusyIndicator(); 39 | Exhibit.Debug.exception(e, msg); 40 | alert(msg); 41 | }); 42 | 43 | Exhibit.jQuery(document).one("localeLoaded.exhibit", function(evt) { 44 | localeLoaded = true; 45 | if (delays.length === 0) { 46 | Exhibit.jQuery(document).trigger("scriptsLoaded.exhibit"); 47 | } 48 | }); 49 | 50 | Exhibit.jQuery(document).one("scriptsLoaded.exhibit", function(evt) { 51 | Exhibit.jQuery(document).trigger("registerStaticComponents.exhibit", Exhibit.staticRegistry); 52 | Exhibit.jQuery(document).trigger("staticComponentsRegistered.exhibit"); 53 | }); 54 | 55 | if (Exhibit.params.autoCreate) { 56 | Exhibit.jQuery(document).one("staticComponentsRegistered.exhibit", function(evt) { 57 | Exhibit.autoCreate(); 58 | }); 59 | } 60 | 61 | Exhibit.jQuery(document).one("exhibitConfigured.exhibit", function(evt, ex) { 62 | Exhibit.Bookmark.init(); 63 | Exhibit.History.init(ex, Exhibit.params.persist); 64 | }); 65 | 66 | // Signal recording 67 | Exhibit.jQuery(document).one("loadExtensions.exhibit", function(evt) { 68 | Exhibit.signals["loadExtensions.exhibit"] = true; 69 | }); 70 | 71 | Exhibit.jQuery(document).one("exhibitConfigured.exhibit", function(evt) { 72 | Exhibit.signals["exhibitConfigured.exhibit"] = true; 73 | }); 74 | 75 | Exhibit.checkBackwardsCompatibility(); 76 | Exhibit.staticRegistry = new Exhibit.Registry(true); 77 | 78 | Exhibit.jQuery("link[rel='exhibit-extension']").each(function(idx, el) { 79 | Exhibit.includeJavascriptFile(null, Exhibit.jQuery(el).attr("href"), false); 80 | }); 81 | 82 | Exhibit.wait(function() { 83 | Exhibit.jQuery(document).trigger("registerLocalization.exhibit", Exhibit.staticRegistry); 84 | }); 85 | }); 86 | -------------------------------------------------------------------------------- /docs/js/scripts/registry.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @fileOverview Centralized component registry for easier API access. 3 | * @author Ryan Lee 4 | */ 5 | 6 | /** 7 | * @namespace 8 | * @class 9 | */ 10 | Exhibit.Registry = function(isStatic) { 11 | this._registry = {}; 12 | this._idCache = {}; 13 | this._components = []; 14 | this._isStatic = (typeof isStatic !== "undefined" && isStatic !== null) ? 15 | isStatic : 16 | false; 17 | }; 18 | 19 | Exhibit.Registry.prototype.isStatic = function() { 20 | return this._isStatic; 21 | }; 22 | 23 | /** 24 | * @param {String} component 25 | * @returns {Boolean} 26 | */ 27 | Exhibit.Registry.prototype.createRegistry = function(component) { 28 | this._registry[component] = {}; 29 | this._components.push(component); 30 | }; 31 | 32 | /** 33 | * @returns {Array} 34 | */ 35 | Exhibit.Registry.prototype.components = function() { 36 | return this._components; 37 | }; 38 | 39 | /** 40 | * @param {String} component 41 | * @returns {Boolean} 42 | */ 43 | Exhibit.Registry.prototype.hasRegistry = function(component) { 44 | return typeof this._registry[component] !== "undefined"; 45 | }; 46 | 47 | /** 48 | * @param {String} component 49 | * @returns {Number} 50 | */ 51 | Exhibit.Registry.prototype.generateIdentifier = function(component) { 52 | var branch, key, size; 53 | size = 0; 54 | branch = this._registry[component]; 55 | if (typeof branch !== "undefined") { 56 | for (key in branch) { 57 | if (branch.hasOwnProperty(key)) { 58 | size++; 59 | } 60 | } 61 | } else { 62 | throw new Error(Exhibit._("%registry.error.noSuchRegistry", component)); 63 | } 64 | return size; 65 | }; 66 | 67 | /** 68 | * @param {String} component 69 | * @param {String} id 70 | * @returns {Boolean} 71 | */ 72 | Exhibit.Registry.prototype.isRegistered = function(component, id) { 73 | return (this.hasRegistry(component) && 74 | typeof this._registry[component][id] !== "undefined"); 75 | }; 76 | 77 | /** 78 | * @param {String} component 79 | * @param {String} id 80 | * @param {Object} handler 81 | * @returns {Boolean} 82 | */ 83 | Exhibit.Registry.prototype.register = function(component, id, handler) { 84 | if (!this.isRegistered(component, id)) { 85 | this._registry[component][id] = handler; 86 | if (!this.isStatic() && typeof this._idCache[id] === "undefined") { 87 | this._idCache[id] = handler; 88 | } 89 | return true; 90 | } else { 91 | return false; 92 | } 93 | }; 94 | 95 | /** 96 | * @param {String} component 97 | * @returns {Object} 98 | */ 99 | Exhibit.Registry.prototype.componentHandlers = function(component) { 100 | if (this.hasRegistry(component)) { 101 | return this._registry[component]; 102 | } else { 103 | return null; 104 | } 105 | }; 106 | 107 | /** 108 | * @param {String} component 109 | * @returns {Array} 110 | */ 111 | Exhibit.Registry.prototype.getKeys = function(component) { 112 | var hash, key, keys; 113 | hash = this._registry[component]; 114 | keys = []; 115 | for (key in hash) { 116 | if (hash.hasOwnProperty(key)) { 117 | keys.push(key); 118 | } 119 | } 120 | return keys; 121 | }; 122 | 123 | /** 124 | * Called when both the type of component and its ID are known to retrieve 125 | * the object associated with both. 126 | * 127 | * @param {String} component 128 | * @param {String} id 129 | * @returns {Object} 130 | * @see Exhibit.Registry.prototype.getID 131 | */ 132 | Exhibit.Registry.prototype.get = function(component, id) { 133 | if (this.isRegistered(component, id)) { 134 | return this._registry[component][id]; 135 | } else { 136 | return null; 137 | } 138 | }; 139 | 140 | /** 141 | * Called when the component type cannot be specified at the time of 142 | * calling but the ID is expected to exist. Will always return null 143 | * for a static registry. 144 | * 145 | * @param {String} id 146 | * @returns {Object} 147 | * @see Exhibit.Registry.prototype.get 148 | */ 149 | Exhibit.Registry.prototype.getID = function(id) { 150 | if (!this.isStatic()) { 151 | if (typeof this._idCache[id] !== "undefined") { 152 | return this._idCache[id]; 153 | } 154 | } 155 | return null; 156 | }; 157 | 158 | /** 159 | * Typically called from within a dispose() method, removes component 160 | * from Exhibit's awareness, and the handler should be garbage collected. 161 | * 162 | * @param {String} component 163 | * @param {String} id 164 | * @returns {Boolean} 165 | */ 166 | Exhibit.Registry.prototype.unregister = function(component, id) { 167 | var c; 168 | if (this.isRegistered(component, id)) { 169 | c = this.get(component, id); 170 | this._registry[component][id] = null; 171 | delete this._registry[component][id]; 172 | if (!this.isStatic() && typeof this._idCache[id] !== "undefined") { 173 | this._idCache[id] = null; 174 | delete this._idCache[id]; 175 | } 176 | } 177 | }; 178 | -------------------------------------------------------------------------------- /docs/js/scripts/ui/coders/coder.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @fileOverview Coder component. 3 | * @author Ryan Lee 4 | */ 5 | 6 | /** 7 | * @class 8 | * @constructor 9 | * @param {String} key 10 | * @param {Element|jQuery} div 11 | * @param {Exhibit.UIContext} uiContext 12 | */ 13 | Exhibit.Coder = function(key, div, uiContext) { 14 | var self, _instanceKey, _registered, _id, _uiContext, _div, _setIdentifier; 15 | 16 | /** 17 | * @private 18 | */ 19 | self = this; 20 | 21 | /** 22 | * @private 23 | */ 24 | _div = Exhibit.jQuery(div); 25 | 26 | /** 27 | * @private 28 | */ 29 | _uiContext = uiContext; 30 | 31 | /** 32 | * @private 33 | */ 34 | _instanceKey = key; 35 | 36 | /** 37 | * @private 38 | */ 39 | _registered = false; 40 | 41 | /** 42 | * @private 43 | */ 44 | _id = null; 45 | 46 | /** 47 | * @public 48 | */ 49 | this._settingSpecs = {}; 50 | 51 | /** 52 | * @public 53 | */ 54 | this._settings = {}; 55 | 56 | /** 57 | * @public 58 | * @param {Object} specs 59 | */ 60 | this.addSettingSpecs = function(specs) { 61 | Exhibit.jQuery.extend(true, this._settingSpecs, specs); 62 | }; 63 | 64 | /** 65 | * @public 66 | * @returns {Object} 67 | */ 68 | this.getSettingSpecs = function() { 69 | return this._settingSpecs; 70 | }; 71 | 72 | /** 73 | * @public 74 | * @returns {String} 75 | */ 76 | this.getID = function() { 77 | return _id; 78 | }; 79 | 80 | /** 81 | * @public 82 | * @returns {Exhibit.UIContext} 83 | */ 84 | this.getUIContext = function() { 85 | return _uiContext; 86 | }; 87 | 88 | /** 89 | * Returns the containing element for this view. 90 | * @public 91 | * @returns {jQuery} 92 | */ 93 | this.getContainer = function() { 94 | return _div; 95 | }; 96 | 97 | this.register = function() { 98 | this.getUIContext().getMain().getRegistry().register( 99 | Exhibit.Coder.getRegistryKey(), 100 | this.getID(), 101 | this 102 | ); 103 | _registered = true; 104 | }; 105 | 106 | this.unregister = function() { 107 | self.getUIContext().getMain().getRegistry().unregister( 108 | Exhibit.Coder.getRegistryKey(), 109 | self.getID() 110 | ); 111 | _registered = false; 112 | }; 113 | 114 | this._dispose = function() { 115 | this._settingSpecs = null; 116 | 117 | this._settings = null; 118 | Exhibit.jQuery(_div).empty(); 119 | _div = null; 120 | 121 | this.unregister(); 122 | _uiContext = null; 123 | }; 124 | 125 | /** 126 | * @private 127 | */ 128 | _setIdentifier = function() { 129 | _id = Exhibit.jQuery(_div).attr("id"); 130 | if (typeof _id === "undefined" || _id === null) { 131 | _id = _instanceKey 132 | + "-" 133 | + self.getUIContext().getCollection().getID() 134 | + "-" 135 | + self.getUIContext().getMain().getRegistry().generateIdentifier(Exhibit.Coder.getRegistryKey()); 136 | } 137 | }; 138 | 139 | _setIdentifier(); 140 | }; 141 | 142 | /** 143 | * @private 144 | * @constant 145 | */ 146 | Exhibit.Coder._registryKey = "coder"; 147 | 148 | /** 149 | * @public 150 | * @static 151 | * @returns {String} 152 | */ 153 | Exhibit.Coder.getRegistryKey = function() { 154 | return Exhibit.Coder._registryKey; 155 | }; 156 | 157 | /** 158 | * @static 159 | * @public 160 | * @param {jQuery.Event} evt 161 | * @param {Exhibit.Registry} reg 162 | */ 163 | Exhibit.Coder.registerComponent = function(evt, reg) { 164 | if (!reg.hasRegistry(Exhibit.Coder.getRegistryKey())) { 165 | reg.createRegistry(Exhibit.Coder.getRegistryKey()); 166 | } 167 | }; 168 | 169 | Exhibit.jQuery(document).on( 170 | "registerComponents.exhibit", 171 | Exhibit.Coder.registerComponent 172 | ); 173 | -------------------------------------------------------------------------------- /docs/js/scripts/ui/coders/default-color-coder.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @fileOverview Color coder to use when none is provided but one is needed. 3 | * Does NOT extend Exhibit.Coder as it cannot be configured and has no 4 | * need to inherit any of the structure used by other user-configured 5 | * coders. 6 | * @author David Huynh 7 | * @author Ryan Lee 8 | */ 9 | 10 | /** 11 | * @class 12 | * @constructor 13 | * @param {Exhibit.UIContext} uiContext 14 | */ 15 | Exhibit.DefaultColorCoder = function(uiContext) { 16 | }; 17 | 18 | /** 19 | * @constant 20 | */ 21 | Exhibit.DefaultColorCoder.colors = [ 22 | "#FF9000", 23 | "#5D7CBA", 24 | "#A97838", 25 | "#8B9BBA", 26 | "#FFC77F", 27 | "#003EBA", 28 | "#29447B", 29 | "#543C1C" 30 | ]; 31 | 32 | /** 33 | * @private 34 | */ 35 | Exhibit.DefaultColorCoder._map = {}; 36 | 37 | /** 38 | * @private 39 | */ 40 | Exhibit.DefaultColorCoder._nextColor = 0; 41 | 42 | /** 43 | * @param {String} key 44 | * @param {Object} flags 45 | * @param {Boolean} flags.missing 46 | * @param {Exhibit.Set} flags.keys 47 | * @returns {String} 48 | * @depends Exhibit.Coders 49 | */ 50 | Exhibit.DefaultColorCoder.prototype.translate = function(key, flags) { 51 | if (typeof key === "undefined" || key === null) { 52 | if (typeof flags !== "undefined" && flags !== null) { 53 | flags.missing = true; 54 | } 55 | return Exhibit.Coders.missingCaseColor; 56 | } else { 57 | if (typeof flags !== "undefined" && flags !== null) { 58 | flags.keys.add(key); 59 | } 60 | if (typeof Exhibit.DefaultColorCoder._map[key] !== "undefined") { 61 | return Exhibit.DefaultColorCoder._map[key]; 62 | } else { 63 | var color = Exhibit.DefaultColorCoder.colors[Exhibit.DefaultColorCoder._nextColor]; 64 | Exhibit.DefaultColorCoder._nextColor = 65 | (Exhibit.DefaultColorCoder._nextColor + 1) % Exhibit.DefaultColorCoder.colors.length; 66 | 67 | Exhibit.DefaultColorCoder._map[key] = color; 68 | return color; 69 | } 70 | } 71 | }; 72 | 73 | /** 74 | * @param {Exhibit.Set} keys 75 | * @param {Object} flags 76 | * @param {Boolean} flags.missing 77 | * @param {Boolean} flags.mixed 78 | * @returns {String} 79 | */ 80 | Exhibit.DefaultColorCoder.prototype.translateSet = function(keys, flags) { 81 | var color, self; 82 | color = null; 83 | self = this; 84 | keys.visit(function(key) { 85 | var color2 = self.translate(key, flags); 86 | if (color === null) { 87 | color = color2; 88 | } else if (color !== color2) { 89 | color = Exhibit.Coders.mixedCaseColor; 90 | flags.mixed = true; 91 | return true; // exit visitation 92 | } 93 | return false; 94 | }); 95 | 96 | if (color !== null) { 97 | return color; 98 | } else { 99 | flags.missing = true; 100 | return Exhibit.Coders.missingCaseColor; 101 | } 102 | }; 103 | 104 | /** 105 | * @returns {String} 106 | */ 107 | Exhibit.DefaultColorCoder.prototype.getOthersLabel = function() { 108 | return Exhibit._("%coders.othersCaseLabel"); 109 | }; 110 | 111 | /** 112 | * @returns {String} 113 | */ 114 | Exhibit.DefaultColorCoder.prototype.getOthersColor = function() { 115 | return Exhibit.Coders.othersCaseColor; 116 | }; 117 | 118 | /** 119 | * @returns {String} 120 | */ 121 | Exhibit.DefaultColorCoder.prototype.getMissingLabel = function() { 122 | return Exhibit._("%coders.missingCaseLabel"); 123 | }; 124 | 125 | /** 126 | * @returns {String} 127 | */ 128 | Exhibit.DefaultColorCoder.prototype.getMissingColor = function() { 129 | return Exhibit.Coders.missingCaseColor; 130 | }; 131 | 132 | /** 133 | * @returns {String} 134 | */ 135 | Exhibit.DefaultColorCoder.prototype.getMixedLabel = function() { 136 | return Exhibit._("%coders.mixedCaseLabel"); 137 | }; 138 | 139 | /** 140 | * @returns {String} 141 | */ 142 | Exhibit.DefaultColorCoder.prototype.getMixedColor = function() { 143 | return Exhibit.Coders.mixedCaseColor; 144 | }; 145 | -------------------------------------------------------------------------------- /docs/js/scripts/ui/coordinator.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @fileOverview Helps bind and trigger events between views. 3 | * @author David Huynh 4 | * @author Ryan Lee 5 | */ 6 | 7 | /** 8 | * @constructor 9 | * @class 10 | * @param {Exhibit.UIContext} uiContext 11 | */ 12 | Exhibit.Coordinator = function(uiContext, div) { 13 | this._uiContext = uiContext; 14 | this._listeners = []; 15 | 16 | /** 17 | * Returns the programmatic identifier used for this view. 18 | * @public 19 | * @returns {String} 20 | */ 21 | this.getID = function() { 22 | return _id; 23 | }; 24 | 25 | /** 26 | * @private 27 | */ 28 | _setIdentifier = function() { 29 | if (typeof div !== "undefined") { 30 | _id = Exhibit.jQuery(div).attr("id"); 31 | } 32 | if (typeof _id === "undefined" || _id === null) { 33 | _id = self.getUIContext().getCollection().getID() 34 | + "-" 35 | + self.getUIContext().getMain().getRegistry().generateIdentifier(Exhibit.Coordinator.getRegistryKey()); 36 | } 37 | }; 38 | 39 | _setIdentifier(); 40 | /** 41 | * Enter this view into the registry, making it easier to locate. 42 | */ 43 | uiContext.getMain().getRegistry().register( 44 | Exhibit.Coordinator.getRegistryKey(), 45 | this.getID(), 46 | this 47 | ); 48 | this._registered = true; 49 | }; 50 | 51 | Exhibit.Coordinator._registryKey = "coordinator"; 52 | /** 53 | * @public 54 | * @static 55 | * @returns {String} 56 | */ 57 | Exhibit.Coordinator.getRegistryKey = function() { 58 | return Exhibit.Coordinator._registryKey; 59 | }; 60 | 61 | Exhibit.Coordinator.registerComponent = function(evt, reg) { 62 | if (!reg.hasRegistry(Exhibit.Coordinator.getRegistryKey())) { 63 | reg.createRegistry(Exhibit.Coordinator.getRegistryKey()); 64 | } 65 | }; 66 | 67 | Exhibit.jQuery(document).on( 68 | "registerComponents.exhibit", 69 | Exhibit.Coordinator.registerComponent 70 | ); 71 | 72 | /** 73 | * @static 74 | * @param {Object} configuration 75 | * @param {Exhibit.UIContext} uiContext 76 | * @returns {Exhibit.Coordinator} 77 | */ 78 | Exhibit.Coordinator.create = function(configuration, uiContext) { 79 | return new Exhibit.Coordinator(uiContext); 80 | }; 81 | 82 | /** 83 | * @static 84 | * @param {Element} div 85 | * @param {Exhibit.UIContext} uiContext 86 | * @returns {Exhibit.Coordinator} 87 | */ 88 | Exhibit.Coordinator.createFromDOM = function(div, uiContext) { 89 | return new Exhibit.Coordinator(Exhibit.UIContext.createFromDOM(div, uiContext, false), div); 90 | }; 91 | 92 | /** 93 | * 94 | */ 95 | Exhibit.Coordinator.prototype.dispose = function() { 96 | this._uiContext.dispose(); 97 | this._uiContext = null; 98 | }; 99 | 100 | /** 101 | * @param {Function} callback 102 | * @returns {Exhibit.Coordinator._Listener} 103 | */ 104 | Exhibit.Coordinator.prototype.addListener = function(callback) { 105 | var listener = new Exhibit.Coordinator._Listener(this, callback); 106 | this._listeners.push(listener); 107 | 108 | return listener; 109 | }; 110 | 111 | /** 112 | * @param {Exhibit.Coordinator._Listener} listener 113 | */ 114 | Exhibit.Coordinator.prototype._removeListener = function(listener) { 115 | var i; 116 | for (i = 0; i < this._listeners.length; i++) { 117 | if (this._listeners[i] === listener) { 118 | this._listeners.splice(i, 1); 119 | return; 120 | } 121 | } 122 | }; 123 | 124 | /** 125 | * @param {Exhibit.Coordinator._Listener} listener 126 | * @param {Object} o 127 | */ 128 | Exhibit.Coordinator.prototype._fire = function(listener, o) { 129 | var i, listener2; 130 | for (i = 0; i < this._listeners.length; i++) { 131 | listener2 = this._listeners[i]; 132 | if (listener2 !== listener) { 133 | listener2._callback(o); 134 | } 135 | } 136 | }; 137 | 138 | /** 139 | * @constructor 140 | * @class 141 | * @param {Exhibit.Coordinator} coordinator 142 | * @param {Function} callback 143 | */ 144 | Exhibit.Coordinator._Listener = function(coordinator, callback) { 145 | this._coordinator = coordinator; 146 | this._callback = callback; 147 | }; 148 | 149 | /** 150 | */ 151 | Exhibit.Coordinator._Listener.prototype.dispose = function() { 152 | this._coordinator._removeListener(this); 153 | }; 154 | 155 | /** 156 | * @param {Object} o 157 | */ 158 | Exhibit.Coordinator._Listener.prototype.fire = function(o) { 159 | this._coordinator._fire(this, o); 160 | }; 161 | -------------------------------------------------------------------------------- /docs/js/scripts/ui/facets/date-l10n.js: -------------------------------------------------------------------------------- 1 | /****************************************************************************** 2 | * Timegrid Date English localization 3 | *****************************************************************************/ 4 | 5 | if (!("l10n" in Date)) { 6 | Date.l10n = {}; 7 | } 8 | 9 | /** Full month names. Change this for local month names */ 10 | Date.l10n.monthNames =[ 'January','February','March','April','May','June','July','August','September','October','November','December']; 11 | 12 | /** Month abbreviations. Change this for local month names */ 13 | Date.l10n.monthAbbreviations = ['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec']; 14 | 15 | /** Full day names. Change this for local month names */ 16 | Date.l10n.dayNames = ['Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday']; 17 | 18 | /** Day abbreviations. Change this for local month names */ 19 | Date.l10n.dayAbbreviations = ['Sun','Mon','Tue','Wed','Thu','Fri','Sat']; 20 | 21 | /** 22 | * Used for parsing ambiguous dates like 1/2/2000 - default to preferring 23 | * 'American' format meaning Jan 2. Set to false to prefer 'European' format 24 | * meaning Feb 1. 25 | */ 26 | Date.l10n.preferAmericanFormat = true; 27 | 28 | /** Used to specify which day the week starts on, 0 meaning Sunday, etc. */ 29 | Date.l10n.firstDayOfWeek = 0; 30 | -------------------------------------------------------------------------------- /docs/js/scripts/ui/facets/util/debug.js: -------------------------------------------------------------------------------- 1 | /*================================================== 2 | * Debug Utility Functions 3 | *================================================== 4 | */ 5 | 6 | Timegrid.Debug = new Object(); 7 | 8 | Timegrid.Debug.log = function(msg) { 9 | }; 10 | 11 | Timegrid.Debug.exception = function(e) { 12 | e = $.getIsIE() ? e.message : e; 13 | $.debugException(e, "Caught exception"); 14 | }; 15 | 16 | -------------------------------------------------------------------------------- /docs/js/scripts/ui/facets/util/jquery.dimensions.js: -------------------------------------------------------------------------------- 1 | /* Copyright (c) 2007 Paul Bakaus (paul.bakaus@googlemail.com) and Brandon Aaron (brandon.aaron@gmail.com || http://brandonaaron.net) 2 | * Dual licensed under the MIT (http://www.opensource.org/licenses/mit-license.php) 3 | * and GPL (http://www.opensource.org/licenses/gpl-license.php) licenses. 4 | * 5 | * $LastChangedDate: 2007-07-01 20:19:35 -0500 (Sun, 01 Jul 2007) $ 6 | * $Rev: 2209 $ 7 | * 8 | * Version: 1.0rc1 9 | */ 10 | eval(function(p,a,c,k,e,r){e=function(c){return(c35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--)r[e(c)]=k[c]||e(c);k=[function(e){return r[e]}];e=function(){return'\\w+'};c=1};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p}('(8($){p g=$.19.D,w=$.19.w;$.19.z({D:8(){4(1[0]==h)5 Z.1a||$.I&&7.10.1z||7.q.1z;4(1[0]==7)5 1t.1s(7.q.1H,7.q.13);5 g.1k(1,1h)},w:8(){4(1[0]==h)5 Z.1d||$.I&&7.10.1c||7.q.1c;4(1[0]==7)5 1t.1s(7.q.1B,7.q.11);5 w.1k(1,1h)},1a:8(){5 1[0]==h||1[0]==7?1.D():1.P(\':J\')?1[0].13-f(1,\'k\')-f(1,\'1A\'):1.D()+f(1,\'18\')+f(1,\'1y\')},1d:8(){5 1[0]==h||1[0]==7?1.w():1.P(\':J\')?1[0].11-f(1,\'j\')-f(1,\'1x\'):1.w()+f(1,\'15\')+f(1,\'1u\')},1K:8(){5 1[0]==h||1[0]==7?1.D():1.P(\':J\')?1[0].13:1.D()+f(1,\'k\')+f(1,\'1A\')+f(1,\'18\')+f(1,\'1y\')},1J:8(){5 1[0]==h||1[0]==7?1.w():1.P(\':J\')?1[0].11:1.w()+f(1,\'j\')+f(1,\'1x\')+f(1,\'15\')+f(1,\'1u\')},l:8(a){4(a!=1q)5 1.1o(8(){4(1==h||1==7)h.1m(a,$(h).n());o 1.l=a});4(1[0]==h||1[0]==7)5 Z.1G||$.I&&7.10.l||7.q.l;5 1[0].l},n:8(a){4(a!=1q)5 1.1o(8(){4(1==h||1==7)h.1m($(h).l(),a);o 1.n=a});4(1[0]==h||1[0]==7)5 Z.1F||$.I&&7.10.n||7.q.n;5 1[0].n},C:8(c,d){p a=1[0],3=a.S,6=a.R,c=$.z({Q:m,K:m,O:m,t:m},c||{}),x=a.N,y=a.M,v=a.l,u=a.n;4($.i.17||$.i.16){x+=f(a,\'j\');y+=f(a,\'k\')}4(($.i.Y||$.i.X)&&$.r(6,\'C\')!=\'W\'){x-=f(6,\'j\');y-=f(6,\'k\')}4($.i.17){B{4(3!=a&&$.r(3,\'1w\')!=\'J\'){x+=f(3,\'j\');y+=f(3,\'k\')}4(3==6)1v}H((3=3.S)&&3.s!=\'G\')}4($.i.16&&(6.s!=\'G\'&&$.r(6,\'C\')==\'W\')){B{x+=6.N;y+=6.M;x+=f(6,\'j\');y+=f(6,\'k\')}H((6=6.R)&&(6.s!=\'G\'&&$.r(6,\'C\')==\'W\'))}p b=e(a,c,x,y,v,u);4(d){$.z(d,b);5 1}o{5 b}},1I:8(b,c){p x=0,y=0,v=0,u=0,9=1[0],3=1[0],6,U,L=$.r(9,\'C\'),A=$.i.17,E=$.i.16,1p=$.i.Y,1n=$.i.X,12=m,14=m,b=$.z({Q:F,K:m,O:m,t:F,1j:m},b||{});4(b.1j)5 1.1i(b,c);4(9.s==\'G\'){x=9.N;y=9.M;4(A){x+=f(9,\'V\')+(f(9,\'j\')*2);y+=f(9,\'T\')+(f(9,\'k\')*2)}o 4(1n){x+=f(9,\'V\');y+=f(9,\'T\')}o 4(E&&1l.I){x+=f(9,\'j\');y+=f(9,\'k\')}}o{B{U=$.r(3,\'C\');x+=3.N;y+=3.M;4(A||E){x+=f(3,\'j\');y+=f(3,\'k\');4(A&&U==\'1g\')12=F;4(E&&U==\'1E\')14=F}6=3.R;4(b.t||A){B{4(b.t){v+=3.l;u+=3.n}4(A&&3!=9&&$.r(3,\'1w\')!=\'J\'){x+=f(3,\'j\');y+=f(3,\'k\')}3=3.S}H(3!=6)}3=6;4(3.s==\'G\'||3.s==\'1e\'){4((1p||(E&&$.I))&&L!=\'1g\'&&L!=\'1f\'){x+=f(3,\'V\');y+=f(3,\'T\')}4((A&&!12&&L!=\'1f\')||(E&&L==\'W\'&&!14)){x+=f(3,\'j\');y+=f(3,\'k\')}1v}}H(3)}p a=e(9,b,x,y,v,u);4(c){$.z(c,a);5 1}o{5 a}},1i:8(b,c){p x=0,y=0,v=0,u=0,3=1[0],6,b=$.z({Q:F,K:m,O:m,t:F},b||{});B{x+=3.N;y+=3.M;6=3.R;4(b.t){B{v+=3.l;u+=3.n;3=3.S}H(3!=6)}3=6}H(3&&3.s!=\'G\'&&3.s!=\'1e\');p a=e(1[0],b,x,y,v,u);4(c){$.z(c,a);5 1}o{5 a}}});p f=8(b,a){5 1D($.r(b.1C?b[0]:b,a))||0};p e=8(b,c,x,y,a,d){4(!c.Q){x-=f(b,\'V\');y-=f(b,\'T\')}4(c.K&&($.i.Y||$.i.X)){x+=f(b,\'j\');y+=f(b,\'k\')}o 4(!c.K&&!($.i.Y||$.i.X)){x-=f(b,\'j\');y-=f(b,\'k\')}4(c.O){x+=f(b,\'15\');y+=f(b,\'18\')}4(c.t){a-=b.l;d-=b.n}5 c.t?{1b:y-d,1r:x-a,n:d,l:a}:{1b:y,1r:x}}})(1l);',62,109,'|this||parent|if|return|op|document|function|elem||||||||window|browser|borderLeftWidth|borderTopWidth|scrollLeft|false|scrollTop|else|var|body|css|tagName|scroll|st|sl|width|||extend|mo|do|position|height|ie|true|BODY|while|boxModel|visible|border|elemPos|offsetTop|offsetLeft|padding|is|margin|offsetParent|parentNode|marginTop|parPos|marginLeft|static|opera|safari|self|documentElement|offsetWidth|absparent|offsetHeight|relparent|paddingLeft|msie|mozilla|paddingTop|fn|innerHeight|top|clientWidth|innerWidth|HTML|fixed|absolute|arguments|offsetLite|lite|apply|jQuery|scrollTo|oa|each|sf|undefined|left|max|Math|paddingRight|break|overflow|borderRightWidth|paddingBottom|clientHeight|borderBottomWidth|scrollWidth|jquery|parseInt|relative|pageYOffset|pageXOffset|scrollHeight|offset|outerWidth|outerHeight'.split('|'),0,{})) -------------------------------------------------------------------------------- /docs/js/scripts/ui/facets/util/jquery.simile.js: -------------------------------------------------------------------------------- 1 | /** 2 | * This code implements the Simile jQuery plugin, which in turns simply 3 | * provides several convenient and useful functions for manipulating the 4 | * DOM, etc. 5 | * @overview Simile jQuery plugin 6 | */ 7 | 8 | jQuery.extend({ 9 | /** 10 | * Simply capitalizes the first letter of each word in its argument. 11 | */ 12 | capitalize: function(s) { 13 | return s.charAt(0).toUpperCase() + s.substring(1).toLowerCase(); 14 | }, 15 | /** 16 | * Provides a basic mechanism for Javascript inheritance. 17 | */ 18 | inherit: function(subclass, superclass) { 19 | function Dummy() {}; 20 | Dummy.prototype = superclass.prototype; 21 | subclass.prototype = new Dummy(); 22 | subclass.prototype.constructor = subclass; 23 | subclass.superclass = superclass; 24 | subclass.superproto = superclass.prototype; 25 | }, 26 | /** 27 | * Recursively deep-copies the given object. 28 | */ 29 | deepClone: function(obj, deep) { 30 | if (deep == null) { deep = true; } 31 | var objectClone = new obj.constructor(); 32 | for (var property in obj) { 33 | if (!deep) { 34 | objectClone[property] = obj[property]; 35 | } else if (typeof obj[property] == 'object') { 36 | objectClone[property] = obj[property].clone(deep); 37 | } else { 38 | objectClone[property] = obj[property]; 39 | } 40 | } 41 | return objectClone; 42 | }, 43 | /** 44 | * Returns the width of the scrollbar. 45 | */ 46 | scrollWidth: function() { 47 | var scr = null; 48 | var inn = null; 49 | var wNoScroll = 0; 50 | var wScroll = 0; 51 | 52 | // Outer scrolling div 53 | scr = document.createElement('div'); 54 | scr.style.position = 'absolute'; 55 | scr.style.top = '-1000px'; 56 | scr.style.left = '-1000px'; 57 | scr.style.width = '100px'; 58 | scr.style.height = '50px'; 59 | // Start with no scrollbar 60 | scr.style.overflow = 'hidden'; 61 | 62 | // Inner content div 63 | inn = document.createElement('div'); 64 | inn.style.width = '100%'; 65 | inn.style.height = '200px'; 66 | 67 | // Put the inner div in the scrolling div 68 | scr.appendChild(inn); 69 | // Append the scrolling div to the doc 70 | document.body.appendChild(scr); 71 | 72 | // Width of the inner div sans scrollbar 73 | wNoScroll = inn.offsetWidth; 74 | // Add the scrollbar 75 | scr.style.overflow = 'auto'; 76 | // Width of the inner div width scrollbar 77 | wScroll = inn.offsetWidth; 78 | 79 | // Remove the scrolling div from the doc 80 | document.body.removeChild( 81 | document.body.lastChild); 82 | 83 | // Pixel width of the scroller, with an awful, awful hack 84 | // FIXME: Fix hardcoded scrollwidth 85 | return (wNoScroll - wScroll) || 17; 86 | } 87 | }); 88 | 89 | jQuery.fn.extend({ 90 | /** 91 | * The attrs method extends jQuery to allow for aggregating attributes of 92 | * all matched elements in a $('..') expression into a nice hash. It also 93 | * supports only returning attributes within a certain namespace, e.g. 94 | * ex:role, when provided with the namespace prefix as an argument. 95 | */ 96 | attrs: function(ns) { 97 | // Caching the compiled regex speeds this up a bit 98 | if (!this.__namespaceRegexps) { 99 | this.__namespaceRegexps = {}; 100 | } 101 | var regexp = this.__namespaceRegexps[ns]; 102 | if (!regexp) { 103 | this.__namespaceRegexps[ns] = regexp = 104 | ns ? eval("/^" + ns + ":(.+)/") : /^([^:]*)$/; 105 | } 106 | var result = {}; 107 | this.each(function() { 108 | // Within this loop, 'this' refers to each matched DOM element 109 | var atts = this.attributes; 110 | var l = atts.length; 111 | for (var i = 0; i < l; i++) { 112 | var m = atts[i].name.match(regexp); 113 | if (m) { result[m[1]] = atts[i].value; } 114 | } 115 | }); 116 | return result; 117 | } 118 | }); 119 | -------------------------------------------------------------------------------- /docs/js/scripts/ui/facets/util/util.js: -------------------------------------------------------------------------------- 1 | /****************************************************************************** 2 | * Utility Functions 3 | *****************************************************************************/ 4 | 5 | Timegrid.abstract = function(name) { 6 | return function() { 7 | throw "A " + name + " method has not been implemented!"; 8 | return; 9 | }; 10 | }; 11 | 12 | Timegrid.Interval = function(ms) { 13 | // Conversion factors as varants to eliminate all the multiplication 14 | var SECONDS_CF = 1000; 15 | var MINUTES_CF = 60000; 16 | var HOURS_CF = 3600000; 17 | var DAYS_CF = 86400000; 18 | var WEEKS_CF = 604800000; 19 | var FORTNIGHTS_CF = 1209600000; 20 | var MONTHS_CF = 2592000000; 21 | var QUARTERS_CF = 7776000000; 22 | var YEARS_CF = 31557600000; 23 | var DECADES_CF = 315576000000; 24 | var CENTURIES_CF = 3155760000000; 25 | 26 | this.milliseconds = Math.abs(ms); 27 | this.seconds = Math.round(this.milliseconds / SECONDS_CF); 28 | this.minutes = Math.round(this.milliseconds / MINUTES_CF); 29 | this.hours = Math.round(this.milliseconds / HOURS_CF); 30 | this.days = Math.floor(this.milliseconds / DAYS_CF); 31 | this.weeks = Math.round(this.milliseconds / WEEKS_CF); 32 | this.fortnights = Math.round(this.milliseconds / FORTNIGHTS_CF); 33 | this.months = Math.round(this.milliseconds / MONTHS_CF); 34 | // rounding errors! 35 | this.quarters = Math.round(this.milliseconds / QUARTERS_CF); 36 | // rounding errors! 37 | this.years = Math.round(this.milliseconds / YEARS_CF); 38 | // rounding errors! 39 | this.decades = Math.round(this.milliseconds / DECADES_CF); 40 | // rounding errors! 41 | this.centuries = Math.round(this.milliseconds / CENTURIES_CF); 42 | // rounding errors! 43 | 44 | return this; 45 | }; 46 | 47 | Timegrid.IntervaltoString = function() { 48 | return this.milliseconds.toString(); 49 | }; 50 | -------------------------------------------------------------------------------- /docs/js/scripts/ui/widgets/bookmark-widget.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @fileOverview Widget for acquiring permalink to state of Exhibit. 3 | * @author Ryan Lee 4 | */ 5 | 6 | // @@@ integrate bit.ly or some other url shortener? 7 | 8 | /** 9 | * @class 10 | * @constructor 11 | * @param {Element} elmt 12 | * @param {Exhibit.UIContext} uiContext 13 | */ 14 | Exhibit.BookmarkWidget = function(elmt, uiContext) { 15 | this._uiContext = uiContext; 16 | this._div = elmt; 17 | this._settings = {}; 18 | this._controlPanel = null; 19 | this._popup = null; 20 | }; 21 | 22 | /** 23 | * @static 24 | * @param {Object} configuration 25 | * @param {Element} elmt 26 | * @param {Exhibit.UIContext} uiContext 27 | * @returns {Exhibit.BookmarkWidget} 28 | */ 29 | Exhibit.BookmarkWidget.create = function(configuration, elmt, uiContext) { 30 | var widget = new Exhibit.BookmarkWidget( 31 | elmt, 32 | Exhibit.UIContext.create(configuration, uiContext) 33 | ); 34 | Exhibit.BookmarkWidget._configure(widget, configuration); 35 | widget._initializeUI(); 36 | return widget; 37 | }; 38 | 39 | Exhibit.BookmarkWidget.createFromDOM = function(configElmt, containerElmt, uiContext) { 40 | var configuration, widget; 41 | configuration = Exhibit.getConfigurationFromDOM(configElmt); 42 | widget = new Exhibit.BookmarkWidget( 43 | (typeof containerElmt !== "undefined" && containerElmt !== null) ? 44 | containerElmt : configElmt, 45 | Exhibit.UIContext.createFromDOM(configElmt, uiContext) 46 | ); 47 | Exhibit.BookmarkWidget._configure(widget, configuration); 48 | widget._initializeUI(); 49 | return widget; 50 | }; 51 | 52 | /** 53 | * @static 54 | * @private 55 | * @param {Exhibit.BookmarkWidget} widget 56 | * @param {Object} configuration 57 | */ 58 | Exhibit.BookmarkWidget._configure = function(widget, configuration) { 59 | }; 60 | 61 | /** 62 | * 63 | */ 64 | Exhibit.BookmarkWidget.prototype._initializeUI = function() { 65 | var popup; 66 | popup = Exhibit.jQuery("
") 67 | .attr("class", "exhibit-bookmarkWidget-popup"); 68 | this._fillPopup(popup); 69 | Exhibit.jQuery(this.getContainer()).append(popup); 70 | this._popup = popup; 71 | }; 72 | 73 | /** 74 | * @public 75 | * @param {Exhibit.ControlPanel} panel 76 | */ 77 | Exhibit.BookmarkWidget.prototype.reconstruct = function(panel) { 78 | this._popup = null; 79 | this._initializeUI(); 80 | }; 81 | 82 | /** 83 | * @param {jQuery} popup 84 | */ 85 | Exhibit.BookmarkWidget.prototype._fillPopup = function(popup) { 86 | var self, img; 87 | 88 | self = this; 89 | img = Exhibit.UI.createTranslucentImage("images/bookmark-icon.png"); 90 | Exhibit.jQuery(img) 91 | .addClass("exhibit-bookmarkWidget-button") 92 | .attr("title", Exhibit._("%widget.bookmark.tooltip")) 93 | .bind("click", function(evt) { 94 | self._showBookmark(img, evt); 95 | }) 96 | .appendTo(popup); 97 | }; 98 | 99 | /** 100 | * @param {jQuery} elmt 101 | * @param {jQuery.Event} evt 102 | */ 103 | Exhibit.BookmarkWidget.prototype._showBookmark = function(elmt, evt) { 104 | var self, popupDom, el; 105 | self = this; 106 | self._controlPanel.childOpened(); 107 | popupDom = Exhibit.UI.createPopupMenuDom(elmt); 108 | el = Exhibit.jQuery(''). 109 | attr("value", Exhibit.Bookmark.generateBookmark()). 110 | attr("size", 40); 111 | Exhibit.jQuery(popupDom.elmt).append(Exhibit.jQuery(el)); 112 | Exhibit.jQuery(popupDom.elmt).one("closed.exhibit", function(evt) { 113 | self.dismiss(); 114 | }); 115 | popupDom.open(evt); 116 | Exhibit.jQuery(el).get(0).select(); 117 | }; 118 | 119 | /** 120 | * @returns {jQuery} 121 | */ 122 | Exhibit.BookmarkWidget.prototype.getContainer = function() { 123 | return Exhibit.jQuery(this._div); 124 | }; 125 | 126 | /** 127 | * 128 | */ 129 | Exhibit.BookmarkWidget.prototype.dispose = function() { 130 | this._uiContext.dispose(); 131 | this._uiContext = null; 132 | this._div = null; 133 | this._settings = null; 134 | }; 135 | 136 | /** 137 | * @param {Exhibit.ControlPanel} panel 138 | */ 139 | Exhibit.BookmarkWidget.prototype.setControlPanel = function(panel) { 140 | this._controlPanel = panel; 141 | }; 142 | 143 | /** 144 | * 145 | */ 146 | Exhibit.BookmarkWidget.prototype.dismiss = function() { 147 | this._controlPanel.childClosed(); 148 | }; 149 | -------------------------------------------------------------------------------- /docs/js/scripts/ui/widgets/logo.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @fileOverview 3 | * @author David Huynh 4 | * @author Ryan Lee 5 | */ 6 | 7 | /** 8 | * @constructor 9 | * @class 10 | * @param {Element} elmt 11 | * @param {Exhibit._Impl} exhibit 12 | */ 13 | Exhibit.Logo = function(elmt, exhibit) { 14 | this._exhibit = exhibit; 15 | this._elmt = elmt; 16 | this._color = "Silver"; 17 | }; 18 | 19 | /** 20 | * @static 21 | * @param {Object} configuration 22 | * @param {Element} elmt 23 | * @param {Exhibit._Impl} exhibit 24 | * @returns {Exhibit.Logo} 25 | */ 26 | Exhibit.Logo.create = function(configuration, elmt, exhibit) { 27 | var logo; 28 | 29 | logo = new Exhibit.Logo(elmt, exhibit); 30 | 31 | if (typeof configuration.color !== "undefined") { 32 | logo._color = configuration.color; 33 | } 34 | 35 | logo._initializeUI(); 36 | return logo; 37 | }; 38 | 39 | /** 40 | * @static 41 | * @param {Element} elmt 42 | * @param {Exhibit._Impl} exhibit 43 | * @returns {Exhibit.Logo} 44 | */ 45 | Exhibit.Logo.createFromDOM = function(elmt, exhibit) { 46 | var logo, color; 47 | logo = new Exhibit.Logo(elmt, exhibit); 48 | 49 | color = Exhibit.getAttribute(elmt, "color"); 50 | if (color !== null && color.length > 0) { 51 | logo._color = color; 52 | } 53 | 54 | logo._initializeUI(); 55 | return logo; 56 | }; 57 | 58 | /** 59 | * 60 | */ 61 | Exhibit.Logo.prototype.dispose = function() { 62 | this._elmt = null; 63 | this._exhibit = null; 64 | }; 65 | 66 | /** 67 | * @private 68 | */ 69 | Exhibit.Logo.prototype._initializeUI = function() { 70 | var logoURL, img, id, a; 71 | 72 | logoURL = Exhibit.urlPrefix + "images/logos/exhibit-small-" + this._color + ".png"; 73 | img = Exhibit.jQuery.simileBubble("createTranslucentImage", logoURL); 74 | id = "exhibit-logo-image"; 75 | if (Exhibit.jQuery('#' + id).length === 0) { 76 | Exhibit.jQuery(img).attr("id", id); 77 | } 78 | a = Exhibit.jQuery("") 79 | .attr("href", Exhibit.exhibitLink) 80 | .attr("title", Exhibit.exhibitLink) 81 | .attr("targe", "_blank") 82 | .append(img); 83 | 84 | Exhibit.jQuery(this._elmt).append(a); 85 | }; 86 | -------------------------------------------------------------------------------- /docs/js/scripts/ui/widgets/option-widget.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @fileOverview View header option making widget 3 | * @author David Huynh 4 | * @author Ryan Lee 5 | */ 6 | 7 | /** 8 | * @constructor 9 | * @class 10 | * @param {Object} configuration 11 | * @param {Element} containerElmt 12 | * @param {Exhibit.UIContext} uiContext 13 | */ 14 | Exhibit.OptionWidget = function(configuration, containerElmt, uiContext) { 15 | this._label = configuration.label; 16 | this._checked = typeof configuration.checked !== "undefined" ? 17 | configuration.checked : 18 | false; 19 | this._onToggle = configuration.onToggle; 20 | 21 | this._containerElmt = containerElmt; 22 | this._uiContext = uiContext; 23 | this._initializeUI(); 24 | }; 25 | 26 | /** 27 | * @param {Object} configuration 28 | * @param {Element} containerElmt 29 | * @param {Exhibit.UIContext} uiContext 30 | * @returns {Exhibit.OptionWidget} 31 | */ 32 | Exhibit.OptionWidget.create = function(configuration, containerElmt, uiContext) { 33 | return new Exhibit.OptionWidget(configuration, containerElmt, uiContext); 34 | }; 35 | 36 | /** 37 | * 38 | */ 39 | Exhibit.OptionWidget.prototype.dispose = function() { 40 | Exhibit.jQuery(this._containerElmt).empty(); 41 | 42 | this._dom = null; 43 | this._containerElmt = null; 44 | this._uiContext = null; 45 | }; 46 | 47 | /** 48 | * @constant 49 | */ 50 | Exhibit.OptionWidget.uncheckedImageURL = Exhibit.urlPrefix + "images/option.png"; 51 | 52 | /** 53 | * @constant 54 | */ 55 | Exhibit.OptionWidget.checkedImageURL = Exhibit.urlPrefix + "images/option-check.png"; 56 | 57 | /** 58 | * @constant 59 | */ 60 | Exhibit.OptionWidget.uncheckedTemplate = 61 | " %1$s"; 62 | 63 | /** 64 | * @constant 65 | */ 66 | Exhibit.OptionWidget.checkedTemplate = 67 | " %1$s"; 68 | 69 | /** 70 | * 71 | */ 72 | Exhibit.OptionWidget.prototype._initializeUI = function() { 73 | this._containerElmt.className = "exhibit-optionWidget"; 74 | this._dom = Exhibit.jQuery.simileDOM( 75 | "string", 76 | this._containerElmt, 77 | sprintf( 78 | Exhibit.OptionWidget.uncheckedTemplate + Exhibit.OptionWidget.checkedTemplate, 79 | this._label 80 | ), 81 | { uncheckedImage: Exhibit.jQuery.simileBubble("createTranslucentImage", Exhibit.OptionWidget.uncheckedImageURL), 82 | checkedImage: Exhibit.jQuery.simileBubble("createTranslucentImage", Exhibit.OptionWidget.checkedImageURL) 83 | } 84 | ); 85 | 86 | if (this._checked) { 87 | Exhibit.jQuery(this._dom.checkedSpan).show(); 88 | } else { 89 | Exhibit.jQuery(this._dom.uncheckedSpan).show(); 90 | } 91 | 92 | Exhibit.jQuery(this._containerElmt).bind("click", this._onToggle); 93 | }; 94 | 95 | /** 96 | * @returns {Boolean} 97 | */ 98 | Exhibit.OptionWidget.prototype.getChecked = function() { 99 | return this._checked; 100 | }; 101 | 102 | /** 103 | * @param {Boolean} checked 104 | */ 105 | Exhibit.OptionWidget.prototype.setChecked = function(checked) { 106 | if (checked !== this._checked) { 107 | this._checked = checked; 108 | if (checked) { 109 | Exhibit.jQuery(this._dom.checkedSpan).show(); 110 | Exhibit.jQuery(this._dom.uncheckedSpan).hide(); 111 | } else { 112 | Exhibit.jQuery(this._dom.checkedSpan).hide(); 113 | Exhibit.jQuery(this._dom.uncheckedSpan).show(); 114 | } 115 | } 116 | }; 117 | 118 | /** 119 | * 120 | */ 121 | Exhibit.OptionWidget.prototype.toggle = function() { 122 | this.setChecked(!this._checked); 123 | }; 124 | -------------------------------------------------------------------------------- /docs/js/scripts/ui/widgets/reset-history-widget.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @fileOverview Development widget to assist with resetting history, which 3 | * can get in an odd state if the Exhibit is being designed. 4 | * @author Ryan Lee 5 | */ 6 | 7 | /** 8 | * @constructor 9 | * @class 10 | * @param {Element} containerElmt 11 | * @param {Exhibit.UIContext} uiContext 12 | */ 13 | Exhibit.ResetHistoryWidget = function(containerElmt, uiContext) { 14 | this._containerElmt = containerElmt; 15 | this._uiContext = uiContext; 16 | this._settings = {}; 17 | }; 18 | 19 | /** 20 | * @static 21 | * @param {Object} configuration 22 | * @param {Element} elmt 23 | * @param {Exhibit.UIContext} uiContext 24 | * @returns {Exhibit.ResetHistoryWidget} 25 | */ 26 | Exhibit.ResetHistoryWidget.create = function(configuration, elmt, uiContext) { 27 | var widget = new Exhibit.ResetHistoryWidget( 28 | elmt, 29 | Exhibit.UIContext.create(configuration, uiContext) 30 | ); 31 | Exhibit.ResetHistoryWidget._configure(widget, configuration); 32 | widget._initializeUI(); 33 | return widget; 34 | }; 35 | 36 | /** 37 | * @static 38 | * @param {Element} configElmt 39 | * @param {Element} containerElmt 40 | * @param {Exhibit.UIContext} uiContext 41 | * @returns {Exhibit.ResetHistoryWidget} 42 | */ 43 | Exhibit.ResetHistoryWidget.createFromDOM = function(configElmt, containerElmt, uiContext) { 44 | var configuration, widget; 45 | configuration = Exhibit.getConfigurationFromDOM(configElmt); 46 | widget = new Exhibit.ResetHistoryWidget( 47 | (typeof containerElmt !== "undefined" && containerElmt !== null) ? 48 | containerElmt : configElmt, 49 | Exhibit.UIContext.createFromDOM(configElmt, uiContext) 50 | ); 51 | Exhibit.ResetHistoryWidget._configure(widget, configuration); 52 | widget._initializeUI(); 53 | return widget; 54 | }; 55 | 56 | /** 57 | * @static 58 | * @private 59 | * @param {Exhibit.ResetHistoryWidget} widget 60 | * @param {Object} configuration 61 | */ 62 | Exhibit.ResetHistoryWidget._configure = function(widget, configuration) { 63 | }; 64 | 65 | /** 66 | * Sets the history to its initial, empty state and reloads the page. 67 | * @static 68 | */ 69 | Exhibit.ResetHistoryWidget.resetHistory = function() { 70 | Exhibit.History.eraseState(); 71 | window.location.reload(); 72 | }; 73 | 74 | /** 75 | * 76 | */ 77 | Exhibit.ResetHistoryWidget.prototype._initializeUI = function() { 78 | var img; 79 | 80 | img = Exhibit.UI.createTranslucentImage("images/reset-history-icon.png"); 81 | Exhibit.jQuery(img) 82 | .addClass("exhibit-resetHistoryWidget-button") 83 | .attr("title", "Click to clear state and refresh window") 84 | .bind("click", function(evt) { 85 | Exhibit.ResetHistoryWidget.resetHistory(); 86 | }); 87 | Exhibit.jQuery(this._containerElmt).append(img); 88 | }; 89 | 90 | /** 91 | * @public 92 | * @param {Exhibit.ControlPanel} panel 93 | */ 94 | Exhibit.ResetHistoryWidget.prototype.reconstruct = function(panel) { 95 | this._initializeUI(); 96 | }; 97 | 98 | /** 99 | * 100 | */ 101 | Exhibit.ResetHistoryWidget.prototype.dispose = function() { 102 | this._uiContext.dispose(); 103 | this._uiContext = null; 104 | this._div = null; 105 | this._settings = null; 106 | }; 107 | -------------------------------------------------------------------------------- /docs/js/scripts/ui/widgets/resizable-div-widget.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @fileOverview Resizable element widget 3 | * @author David Huynh 4 | * @author Ryan Lee 5 | */ 6 | 7 | /** 8 | * @param {Object} configuration 9 | * @param {Element} elmt 10 | * @param {Exhibit.UIContext} uiContext 11 | */ 12 | Exhibit.ResizableDivWidget = function(configuration, elmt, uiContext) { 13 | this._div = elmt; 14 | this._configuration = configuration; 15 | if (typeof configuration.minHeight === "undefined") { 16 | configuration.minHeight = 10; // pixels 17 | } 18 | this._dragging = false; 19 | this._height = null; 20 | this._origin = null; 21 | this._ondrag = null; 22 | 23 | this._initializeUI(); 24 | }; 25 | 26 | /** 27 | * @param {Object} configuration 28 | * @param {Element} elmt 29 | * @param {Exhibit.UIContext} uiContext 30 | * @returns {Exhibit.ResizableDivWidget} 31 | */ 32 | Exhibit.ResizableDivWidget.create = function(configuration, elmt, uiContext) { 33 | return new Exhibit.ResizableDivWidget(configuration, elmt, uiContext); 34 | }; 35 | 36 | /** 37 | * 38 | */ 39 | Exhibit.ResizableDivWidget.prototype.dispose = function() { 40 | Exhibit.jQuery(this._div).empty(); 41 | this._contentDiv = null; 42 | this._resizerDiv = null; 43 | this._div = null; 44 | }; 45 | 46 | /** 47 | * @returns {Element} 48 | */ 49 | Exhibit.ResizableDivWidget.prototype.getContentDiv = function() { 50 | return this._contentDiv; 51 | }; 52 | 53 | /** 54 | * 55 | */ 56 | Exhibit.ResizableDivWidget.prototype._initializeUI = function() { 57 | var self = this; 58 | 59 | Exhibit.jQuery(this._div).html( 60 | "
" + 61 | '
' + 62 | Exhibit.UI.createTranslucentImageHTML("images/down-arrow.png") + 63 | "
"); 64 | 65 | this._contentDiv = Exhibit.jQuery(this._div).children().get(0); 66 | this._resizerDiv = Exhibit.jQuery(this._div).children().get(1); 67 | 68 | Exhibit.jQuery(this._resizerDiv).on("mousedown", function(evt) { 69 | self._dragging = true; 70 | self._height = Exhibit.jQuery(self._contentDiv).height(); 71 | self._origin = { "x": evt.pageX, "y": evt.pageY }; 72 | 73 | self._ondrag = function(evt2) { 74 | var height = self._height + evt2.pageY - self._origin.y; 75 | Exhibit.jQuery(self._contentDiv).height(Math.max( 76 | height, 77 | self._configuration.minHeight 78 | )); 79 | return false; //stop propagation 80 | }; 81 | Exhibit.jQuery(document).on("mousemove", self._ondrag); 82 | 83 | self._dragdone = function(evt) { 84 | self._dragging = false; 85 | Exhibit.jQuery(document).off("mousemove", self._ondrag); 86 | if (typeof self._configuration.onResize === "function") { 87 | self._configuration.onResize(); 88 | } 89 | }; 90 | Exhibit.jQuery("body").one("mouseup", self._dragdone); 91 | return false; 92 | }); 93 | }; 94 | -------------------------------------------------------------------------------- /docs/js/scripts/util/bookmark.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @fileOverview Methods for generating and interpreting session state 3 | * bookmarks. 4 | * @author Ryan Lee 5 | */ 6 | 7 | /** 8 | * @namespace Bookmarking the current state of a browsing session. 9 | */ 10 | Exhibit.Bookmark = { 11 | /** 12 | * Whether the History system should load the bookmarked state. 13 | * 14 | * @private 15 | */ 16 | _shouldRun: undefined, 17 | 18 | /** 19 | * The bookmark state read in by the bookmarking system. 20 | */ 21 | state: {}, 22 | 23 | /** 24 | * Whether a bookmark was used at the start or not. 25 | */ 26 | run: undefined 27 | }; 28 | 29 | /** 30 | * Generate a string that can be used as the hash portion of a URI 31 | * to be used for bookmarking the current state of an Exhibit browsing 32 | * session. 33 | * 34 | * @static 35 | * @param state {Object} An JSON serializable object fully describing 36 | * the current state. 37 | * @returns {String} The Base64-encoded string representing a JSON 38 | * serialized object. 39 | * @depends JSON 40 | * @depends Base64 41 | */ 42 | Exhibit.Bookmark.generateBookmarkHash = function(state) { 43 | if (typeof state === "undefined" || 44 | state === null || 45 | typeof state.data === "undefined" || 46 | state.data === null || 47 | typeof state.data.state === "undefined" || 48 | state.data.state === null) { 49 | return ""; 50 | } 51 | return Base64.encode(JSON.stringify(state)); 52 | }; 53 | 54 | /** 55 | * Turn a bookmark hash into a representation of state. 56 | * 57 | * @static 58 | * @param hash {String} A Base64-encoded string representing a JSON 59 | * serialized object. 60 | * @returns {Object} The deserialized object represented by the hash. 61 | * @depends JSON 62 | * @depends Base64 63 | */ 64 | Exhibit.Bookmark.interpretBookmarkHash = function(hash) { 65 | if (typeof hash === "undefined" || hash === null || hash === "") { 66 | return null; 67 | } else { 68 | return JSON.parse(Base64.decode(hash)); 69 | } 70 | }; 71 | 72 | /** 73 | * Given the current page state from Exhibit.History, make a bookmark URI. 74 | * 75 | * @static 76 | * @returns {String} The bookmark URI 77 | * @depends Exhibit.History 78 | */ 79 | Exhibit.Bookmark.generateBookmark = function() { 80 | var hash; 81 | hash = Exhibit.Bookmark.generateBookmarkHash(Exhibit.History.getState()); 82 | return document.location.href + ((hash === "") ? "": "#" + hash); 83 | }; 84 | 85 | /** 86 | * Change the state of the page given an interpreted bookmark hash. 87 | * 88 | * @static 89 | * @param state {Object} The interpreted bookmark hash as the state 90 | * object History.js uses. 91 | * @depends Exhibit.History 92 | */ 93 | Exhibit.Bookmark.implementBookmark = function(state) { 94 | if (typeof state !== "undefined" && state !== null) { 95 | Exhibit.History.replaceState(state.data, state.title, state.url); 96 | Exhibit.Bookmark.run = true; 97 | } 98 | }; 99 | 100 | /** 101 | * Answer whether the bookmark system should run or not on the hash 102 | * (if there is a hash) in the current URL. 103 | * 104 | * @returns {Boolean} 105 | */ 106 | Exhibit.Bookmark.runBookmark = function() { 107 | return Exhibit.Bookmark._shouldRun; 108 | }; 109 | 110 | /** 111 | * When run, examine this page's URI for a hash and try to interpret and 112 | * implement it. 113 | * 114 | * @static 115 | */ 116 | Exhibit.Bookmark.init = function() { 117 | var hash, state; 118 | hash = document.location.hash; 119 | if (hash.length > 0) { 120 | try { 121 | state = Exhibit.Bookmark.interpretBookmarkHash(hash.substr(1)); 122 | if (typeof state === "object" && 123 | typeof state["data"] !== "undefined" && 124 | typeof state["title"] !== "undefined" && 125 | typeof state["url"] !== "undefined") { 126 | Exhibit.Bookmark.state = state; 127 | Exhibit.Bookmark._shouldRun = true; 128 | } else { 129 | Exhibit.Bookmark._shouldRun = false; 130 | } 131 | } catch (ex) { 132 | Exhibit.Bookmark._shouldRun = false; 133 | } finally { 134 | Exhibit.Bookmark.run = false; 135 | } 136 | } 137 | }; 138 | -------------------------------------------------------------------------------- /docs/js/scripts/util/coders.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @fileOverview Default colors for color coders. 3 | * @author David Huynh 4 | * @author Ryan Lee 5 | */ 6 | 7 | /** 8 | * @namespace 9 | */ 10 | Exhibit.Coders = { 11 | /** 12 | * @constant 13 | */ 14 | "mixedCaseColor": "#fff", 15 | 16 | /** 17 | * @constant 18 | */ 19 | "othersCaseColor": "#aaa", 20 | 21 | /** 22 | * @constant 23 | */ 24 | "missingCaseColor": "#888" 25 | }; 26 | -------------------------------------------------------------------------------- /docs/js/scripts/util/persistence.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @fileOverview Support methods surrounding generating a URL for an item 3 | * in the database. 4 | * @author David Huynh 5 | * @author Ryan Lee 6 | */ 7 | 8 | /** 9 | * @namespace Contains support methods for generating persistent URLs for 10 | * items in an Exhibit database. 11 | */ 12 | Exhibit.Persistence = { 13 | /** 14 | * Cached URL without query portion. 15 | */ 16 | "_urlWithoutQuery": null, 17 | 18 | /** 19 | * Cached URL without query and hash portions. 20 | */ 21 | "_urlWithoutQueryAndHash": null 22 | }; 23 | 24 | /** 25 | * Given a relative or absolute URL, determine the fragment of the 26 | * corresponding absolute URL up to its last '/' character (relative URLs 27 | * are resolved relative to the document location). 28 | * 29 | * @param {String} url Starting URL to derive a base URL from. 30 | * @returns {String} The base URL. 31 | */ 32 | Exhibit.Persistence.getBaseURL = function(url) { 33 | // HACK: for some unknown reason Safari keeps throwing 34 | // TypeError: no default value 35 | // when this function is called from the RDFa importer. So I put a try catch here. 36 | var url2, i; 37 | try { 38 | url = Exhibit.Persistence.resolveURL(url); 39 | i = url.indexOf("#"); 40 | if (i >= 0) { 41 | url = url.substr(0, i); 42 | } 43 | i = url.lastIndexOf("/"); 44 | if (i < 0) { 45 | return ""; 46 | } else { 47 | return url.substr(0, i + 1); 48 | } 49 | } catch (e) { 50 | return url; 51 | } 52 | }; 53 | 54 | /** 55 | * Given a relative or absolute URL, return the absolute URL (resolving 56 | * relative to the document location). 57 | * 58 | * @param {String} url The orignal URL to resolve. 59 | * @returns {String} The resolved URL. 60 | */ 61 | (function () { 62 | var a = document.createElement('a'); 63 | 64 | Exhibit.Persistence.resolveURL = function (url) { 65 | a.href = url; 66 | return a.href; //browser magic converts to absolute 67 | }; 68 | })(); 69 | 70 | /** 71 | * Return the current document location without the query and hash portions 72 | * of the URL. 73 | * 74 | * @returns {String} The document's location without query and hash portions. 75 | */ 76 | Exhibit.Persistence.getURLWithoutQueryAndHash = function() { 77 | return document.location.origin + document.location.pathname; 78 | }; 79 | 80 | /** 81 | * Return a URL to one item in this Exhibit, encoding it as a hash relative to 82 | * the URL without query and hash. 83 | * 84 | * @param {String} itemID The item's database identifier. 85 | * @returns {String} A URL to Exhibit highlighting the item. 86 | */ 87 | Exhibit.Persistence.getItemLink = function(itemID) { 88 | return Exhibit.Persistence.resolveURL("#" + encodeURIComponent(itemID)); 89 | }; 90 | -------------------------------------------------------------------------------- /docs/js/scripts/util/units.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @author David Huynh 3 | * @author Ryan Lee 4 | * @fileOverview 5 | */ 6 | 7 | /** 8 | * @namespace Utility functions for working with built-in Date objects. 9 | */ 10 | Exhibit.NativeDateUnit = {}; 11 | 12 | /** 13 | * Return right now as a Date object. 14 | * 15 | * @static 16 | * @returns {Date} Right now. 17 | */ 18 | Exhibit.NativeDateUnit.makeDefaultValue = function() { 19 | return new Date(); 20 | }; 21 | 22 | /** 23 | * Make a new Date object with the same value as the argument. 24 | * 25 | * @static 26 | * @param {Date} v Original Date object. 27 | * @returns {Date} New Date object with the same value, not identical. 28 | */ 29 | Exhibit.NativeDateUnit.cloneValue = function(v) { 30 | return new Date(v.getTime()); 31 | }; 32 | 33 | /** 34 | * Based on a format, return a function that can take a string and parse 35 | * the format into a Date object. Currently recognizes ISO-8601 as a 36 | * format; all others are treated as Gregorian. 37 | * 38 | * @requires Exhibit.DateTime 39 | * @see Exhibit.DateTime.parseIso8601DateTime 40 | * @see Exhibit.DateTime.parseGregorianDateTime 41 | * @static 42 | * @param {String} format Name of the date format, commonly ISO-8601. 43 | * @returns {Function} A function that takes a string in the given format 44 | * and returns a Date object. 45 | */ 46 | Exhibit.NativeDateUnit.getParser = function(format) { 47 | if (typeof format === "string") { 48 | format = format.toLowerCase(); 49 | } 50 | return (format === "iso8601" || format === "iso 8601") ? 51 | Exhibit.DateTime.parseIso8601DateTime : 52 | Exhibit.DateTime.parseGregorianDateTime; 53 | }; 54 | 55 | /** 56 | * Returns the object if a Date or parses using native (Gregorian) date 57 | * parsing if a String. 58 | * 59 | * @static 60 | * @param {Date|String} o The object to return or parse. 61 | * @returns {Date} The parsed string or original object. 62 | */ 63 | Exhibit.NativeDateUnit.parseFromObject = function(o) { 64 | return Exhibit.DateTime.parseGregorianDateTime(o); 65 | }; 66 | 67 | /** 68 | * Converts a Date object to its numeric representation in seconds since epoch. 69 | * 70 | * @static 71 | * @param {Date} v The Date object to convert. 72 | * @returns {Number} The date value in seconds since epoch. 73 | */ 74 | Exhibit.NativeDateUnit.toNumber = function(v) { 75 | return v.getTime(); 76 | }; 77 | 78 | /** 79 | * Converts seconds since epoch into a Date object. 80 | * 81 | * @static 82 | * @param {Number} n Seconds since epoch. 83 | * @returns {Date} The corresponding Date object. 84 | */ 85 | Exhibit.NativeDateUnit.fromNumber = function(n) { 86 | return new Date(n); 87 | }; 88 | 89 | /** 90 | * Compares two Date objects. If the values of the two are the same, returns 91 | * 0. If v1 is earlier than v2, the return value is negative. If v1 is 92 | * later than v2, the return value is positive. Also compares anything that 93 | * can be converted to a Number, assuming the number is measured since epoch. 94 | * 95 | * @static 96 | * @param {Date|String|Number} v1 First Date object or raw time value to 97 | compare. 98 | * @param {Date|String|Number} v2 Second Date object or raw time value to 99 | compare. 100 | * @returns {Number} Integer with negative, zero, or positive value depending 101 | * on relative date values. 102 | */ 103 | Exhibit.NativeDateUnit.compare = function(v1, v2) { 104 | var n1, n2; 105 | if (typeof v1 === "object") { 106 | n1 = v1.getTime(); 107 | } else { 108 | n1 = Number(v1); 109 | } 110 | if (typeof v2 === "object") { 111 | n2 = v2.getTime(); 112 | } else { 113 | n2 = Number(v2); 114 | } 115 | 116 | return n1 - n2; 117 | }; 118 | 119 | /** 120 | * Returns the earlier object of the two passed in as arguments. 121 | * 122 | * @static 123 | * @param {Date} v1 The first Date object to compare. 124 | * @param {Date} v2 The second Date object to compare. 125 | * @returns {Date} The earlier of the two arguments. 126 | */ 127 | Exhibit.NativeDateUnit.earlier = function(v1, v2) { 128 | return Exhibit.NativeDateUnit.compare(v1, v2) < 0 ? v1 : v2; 129 | }; 130 | 131 | /** 132 | * Returns the later object of the two passed in as arguments. 133 | * 134 | * @static 135 | * @param {Date} v1 The first Date object to compare. 136 | * @param {Date} v2 The second Date object to compare. 137 | * @returns {Date} The later of the two arguments. 138 | */ 139 | Exhibit.NativeDateUnit.later = function(v1, v2) { 140 | return Exhibit.NativeDateUnit.compare(v1, v2) > 0 ? v1 : v2; 141 | }; 142 | 143 | /** 144 | * Make a new Date object by adding a number of seconds to the original. 145 | * 146 | * @static 147 | * @param {Date} v The Date object to modify. 148 | * @param {Number} n The number of seconds, positive or negative, to add 149 | * to the Date object. 150 | * @returns {Date} A new Date object with the seconds added. 151 | */ 152 | Exhibit.NativeDateUnit.change = function(v, n) { 153 | return new Date(v.getTime() + n); 154 | }; 155 | -------------------------------------------------------------------------------- /docs/js/scripts/util/util.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @author David Huynh 3 | * @author Ryan Lee 4 | * @fileOverview Base for Exhibit utilities and native datatype modifications. 5 | */ 6 | 7 | /** 8 | * @namespace For Exhibit utility classes and methods. 9 | */ 10 | Exhibit.Util = {}; 11 | 12 | /** 13 | * Round a number n to the nearest multiple of precision (any positive value), 14 | * such as 5000, 0.1 (one decimal), 1e-12 (twelve decimals), or 1024 (if you'd 15 | * want "to the nearest kilobyte" -- so round(66000, 1024) == "65536"). You are 16 | * also guaranteed to get the precision you ask for, so round(0, 0.1) == "0.0". 17 | * 18 | * @static 19 | * @param {Number} n Original number. 20 | * @param {Number} [precision] Rounding bucket, by default 1. 21 | * @returns {String} Rounded number into the nearest bucket at the bucket's 22 | * precision, in a form readable by users. 23 | */ 24 | Exhibit.Util.round = function(n, precision) { 25 | var lg; 26 | precision = precision || 1; 27 | lg = Math.floor( Math.log(precision) / Math.log(10) ); 28 | n = (Math.round(n / precision) * precision).toString(); 29 | if (lg >= 0) { 30 | return parseInt(n, 10).toString(); 31 | } 32 | 33 | lg = -lg; 34 | return parseFloat(n).toFixed(lg); 35 | }; 36 | 37 | /** 38 | * Modify the native String type. 39 | */ 40 | (function() { 41 | if (typeof String.prototype.trim === "undefined") { 42 | /** 43 | * Removes leading and trailing spaces. 44 | * 45 | * @returns {String} Trimmed string. 46 | */ 47 | String.prototype.trim = function() { 48 | return this.replace(/^\s+|\s+$/g, ''); 49 | }; 50 | } 51 | 52 | if (typeof String.prototype.startsWith === "undefined") { 53 | /** 54 | * Test if a string begins with a prefix. 55 | * 56 | * @param {String} prefix Prefix to check. 57 | * @returns {Boolean} True if string starts with prefix, false if not. 58 | */ 59 | String.prototype.startsWith = function(prefix) { 60 | return this.length >= prefix.length && this.substr(0, prefix.length) === prefix; 61 | }; 62 | } 63 | 64 | if (typeof String.prototype.endsWith === "undefined") { 65 | /** 66 | * Test if a string ends with a suffix. 67 | * 68 | * @param {String} suffix Suffix to check. 69 | * @returns {Boolean} True if string ends with suffix, false if not. 70 | */ 71 | String.prototype.endsWith = function(suffix) { 72 | return this.length >= suffix.length && this.substr(this.length - suffix.length) === suffix; 73 | }; 74 | } 75 | }()); 76 | -------------------------------------------------------------------------------- /docs/js/styles/browse-panel.css: -------------------------------------------------------------------------------- 1 | /*================================================== 2 | * Browse Panel styles 3 | *================================================== 4 | */ 5 | div.exhibit-browsePanel { 6 | } 7 | 8 | div.exhibit-browsePanel-notConfigureMessage { 9 | border: 1px solid #604800; 10 | padding: 1em; 11 | background: #FFFFE0; 12 | text-align: center; 13 | } 14 | 15 | div.exhibit-browsePanel-logoContainer { 16 | text-align: center; 17 | margin: 1em; 18 | clear: both; 19 | } 20 | 21 | -------------------------------------------------------------------------------- /docs/js/styles/control-panel.css: -------------------------------------------------------------------------------- 1 | .exhibit-controlPanel { 2 | text-align: right; 3 | } 4 | -------------------------------------------------------------------------------- /docs/js/styles/exhibit.css: -------------------------------------------------------------------------------- 1 | /*================================================== 2 | * Exhibit styles 3 | * 4 | * Note that almost all CSS code is in themes. 5 | *================================================== 6 | */ 7 | .exhibit-ui-protection div { 8 | margin: 0; 9 | padding: 0; 10 | } 11 | .exhibit-ui-protection table { 12 | font-size: 100%; 13 | } 14 | .exhibit-ui-protection tr { 15 | vertical-align: top; 16 | } 17 | a img { 18 | border: none; 19 | } 20 | 21 | a.exhibit-action, 22 | a.exhibit-action:link, 23 | a.exhibit-action:active, 24 | a.exhibit-action:visited { 25 | text-decoration: none; 26 | border-bottom: 1px dotted; 27 | cursor: pointer; 28 | } 29 | a.exhibit-action:hover { 30 | border-bottom: 1px solid; 31 | cursor: pointer; 32 | } 33 | 34 | a.exhibit-action-disabled, 35 | a.exhibit-action-disabled:link, 36 | a.exhibit-action-disabled:active, 37 | a.exhibit-action-disabled:visited { 38 | text-decoration: none; 39 | border-bottom: 1px dotted; 40 | cursor: pointer; 41 | opacity: 0.5; 42 | } 43 | a.exhibit-action-disabled:hover { 44 | border-bottom: 1px solid; 45 | cursor: pointer; 46 | } 47 | 48 | a.exhibit-item, 49 | a.exhibit-item:link, 50 | a.exhibit-item:active, 51 | a.exhibit-item:visited { 52 | text-decoration: none; 53 | border-bottom: 1px dotted red; 54 | cursor: pointer; 55 | } 56 | a.exhibit-item:hover { 57 | border-bottom: 1px solid; 58 | cursor: pointer; 59 | } 60 | 61 | span.exhibit-value { 62 | } 63 | 64 | /* 65 | * Menu Popup 66 | */ 67 | div.exhibit-menu-popup { 68 | position: absolute; 69 | width: 15em; 70 | z-index: 1000; 71 | background: #FFFFE0; 72 | border: 1px solid #aaa; 73 | } 74 | 75 | a.exhibit-menu-item { 76 | text-decoration: none; 77 | } 78 | 79 | a.exhibit-menu-item > div { 80 | padding: 2px 2px 2px 20px; 81 | text-indent: -18px; 82 | } 83 | 84 | a:hover.exhibit-menu-item > div { 85 | background: #DFDFC8; 86 | } 87 | 88 | a.exhibit-menu-item div img { 89 | vertical-align: middle; 90 | margin-right: 2px; 91 | } 92 | 93 | div.exhibit-menu-section { 94 | padding: 2px; 95 | font-weight: bold; 96 | } 97 | 98 | /* 99 | * Copy Button and Dialog Box 100 | */ 101 | button.exhibit-copyButton, button.exhibit-button { 102 | border: 1px dashed; 103 | cursor: pointer; 104 | margin: 2px; 105 | } 106 | button:hover.exhibit-copyButton, button.exhibit-button:hover { 107 | background: white; 108 | border: 1px dashed blue; 109 | color: blue; 110 | cursor: pointer; 111 | } 112 | 113 | div.exhibit-copyDialog { 114 | position: absolute; 115 | z-index: 1000; 116 | background: #B2E8FF; 117 | border: 1px solid #aaa; 118 | padding: 2em; 119 | left: 25%; 120 | right: 25%; 121 | } 122 | 123 | div.exhibit-copyDialog textarea { 124 | width: 100%; 125 | font-size: 90%; 126 | color: #888; 127 | } 128 | 129 | div.exhibit-copyDialog button { 130 | float: right; 131 | } 132 | 133 | /* 134 | * Focus Dialog Box 135 | */ 136 | div.exhibit-focusDialog { 137 | position: absolute; 138 | z-index: 1000; 139 | background: #B2E8FF; 140 | border: 1px solid #aaa; 141 | padding: 2em; 142 | left: 25%; 143 | right: 25%; 144 | } 145 | 146 | div.exhibit-focusDialog-lensContainer { 147 | } 148 | 149 | div.exhibit-focusDialog-controls { 150 | margin: 1em; 151 | text-align: center; 152 | } 153 | 154 | /* 155 | * Busy indicator 156 | */ 157 | .exhibit-busyIndicator { 158 | position: fixed; 159 | left: 35%; 160 | top: 35%; 161 | min-width: 25%; 162 | z-index: 1000; 163 | padding: 3ex; 164 | border: 2px solid gray; 165 | border-radius: 3ex; 166 | background: white; 167 | background: rgba(255,255,255,.85); 168 | } 169 | .exhibit-busyIndicator-content { 170 | font-size: 120%; 171 | font-weight: bold; 172 | text-align: center; 173 | } 174 | .exhibit-busyIndicator-content img { 175 | vertical-align: middle; 176 | } 177 | -------------------------------------------------------------------------------- /docs/js/styles/lens.css: -------------------------------------------------------------------------------- 1 | div.exhibit-lens { 2 | border: 1px solid #aaa; 3 | margin-bottom: 1em; 4 | } 5 | 6 | div.exhibit-lens-title { 7 | font-weight: bold; 8 | background: #eee; 9 | padding: 2px; 10 | } 11 | 12 | .exhibit-lens-copyButton { 13 | float: right; 14 | } 15 | 16 | div.exhibit-lens-body { 17 | padding: 0.3em; 18 | } 19 | 20 | table.exhibit-lens-properties { 21 | } 22 | 23 | tr.exhibit-lens-property { 24 | } 25 | 26 | td.exhibit-lens-property-name { 27 | color: #888; 28 | } 29 | 30 | td.exhibit-lens-property-values { 31 | } 32 | 33 | -------------------------------------------------------------------------------- /docs/js/styles/theme-sandy-stone-beach-ocean-diver.css: -------------------------------------------------------------------------------- 1 | /* 2 | From Kuler, http://kuler.adobe.com/ 3 | 4 | #e6e2af 5 | #a7a37e 6 | #efecca 7 | #046380 8 | #002f2f 9 | */ 10 | 11 | div.timegrid-tab { 12 | background-color: #efecca; 13 | } 14 | 15 | div.timegrid-tab-active { 16 | background-color: #a7a37e; 17 | font-weight: bold; 18 | } 19 | 20 | div.timegrid-tab a { 21 | text-decoration: none; 22 | } 23 | 24 | div.timegrid-view { 25 | background: #a7a37e; 26 | border: 1px solid #a7a37e; 27 | } 28 | 29 | div.timegrid-grid-window { 30 | border: none; 31 | background: white; 32 | } 33 | 34 | div.timegrid-xlabels-window { 35 | border-left: 1px solid #a7a37e; 36 | border-right: 1px solid #a7a37e; 37 | border-bottom: 1px solid #a7a37e; 38 | } 39 | div.timegrid-ylabels-window { 40 | border-top: 1px solid #a7a37e; 41 | border-bottom: 1px solid #a7a37e; 42 | border-right: 1px solid #a7a37e; 43 | } 44 | 45 | div.timegrid-hline, div.timegrid-vline { 46 | background: #e6e2af; 47 | } 48 | 49 | div.timegrid-xlabels-window, div.timegrid-ylabels-window { 50 | background: #efecca; 51 | } 52 | 53 | div.timegrid-label { 54 | color: #046380; 55 | } 56 | 57 | .timegrid-xlabels div.timegrid-label { 58 | border-left: 1px solid #e6e2af; 59 | } 60 | 61 | .timegrid-ylabels div.timegrid-label { 62 | border-top: 1px solid #e6e2af; 63 | } 64 | 65 | div.timegrid-event { 66 | background-color: #e6e2af; 67 | color: #046380; 68 | } 69 | 70 | /* Monthly View */ 71 | div.timegrid-month-cell { 72 | color: #046380; 73 | padding: 0px; 74 | } 75 | 76 | ul.timegrid-event-list { 77 | list-style-position: inside; 78 | padding: .5em; 79 | } 80 | -------------------------------------------------------------------------------- /docs/js/styles/timegrid.css: -------------------------------------------------------------------------------- 1 | div.week-default { 2 | font-family: Helvetica, Arial, sans-serif; 3 | font-size: 9pt; 4 | overflow: hidden; 5 | } 6 | 7 | div.week-default * { 8 | margin: 0; 9 | padding: 0; 10 | } 11 | 12 | div.week-default ul, div.week-default li { 13 | font-size: 9pt; 14 | } 15 | 16 | div.timegrid-iterator { 17 | float: left; 18 | font-weight: bold; 19 | height: 1.5em; 20 | } 21 | 22 | .timegrid-iterator-prev, .timegrid-iterator-next { 23 | margin: .5em; 24 | } 25 | 26 | .timegrid-iterator img { 27 | border: none; 28 | } 29 | 30 | div.timegrid-tab { 31 | padding-left: 1em; 32 | padding-right: 1em; 33 | margin: 0px; 34 | float: right; 35 | background-color: #bbb; 36 | } 37 | 38 | div.timegrid-tab-active { 39 | font-weight: bold; 40 | } 41 | 42 | div.timegrid-view { 43 | position: absolute; 44 | top: 1.5em; 45 | bottom: 0px; 46 | width: 100%; 47 | left: 0px; 48 | border: 1px white solid; 49 | } 50 | 51 | div.timegrid-grid-window { 52 | position: absolute; 53 | overflow: scroll; 54 | border: 1px inset black; 55 | } 56 | 57 | table.timegrid-gridlines, .timegrid-hline, .timegrid-vline { 58 | border: 1px solid #e6e2af; 59 | } 60 | 61 | div.timegrid-events { 62 | position: relative; 63 | z-index: 2; 64 | } 65 | 66 | div.timegrid-gridlines { 67 | position: relative; 68 | z-index: 1; 69 | } 70 | 71 | div.timegrid-xlabels { 72 | position: absolute; 73 | left: 0px; 74 | } 75 | 76 | .timegrid-xlabels div.timegrid-label { 77 | top: 0px; 78 | bottom: 0px; 79 | text-align: center; 80 | padding: 3px; 81 | } 82 | 83 | div.timegrid-ylabels { 84 | position: absolute; 85 | } 86 | 87 | .timegrid-ylabels div.timegrid-label { 88 | left: 0px; 89 | right: 0px; 90 | text-align: right; 91 | padding: 3px; 92 | } 93 | 94 | div.timegrid-xlabels-window { 95 | position: absolute; 96 | overflow: hidden; 97 | text-align: center; 98 | } 99 | 100 | div.timegrid-ylabels-window { 101 | position: absolute; 102 | overflow: hidden; 103 | } 104 | 105 | div.timegrid-label { 106 | position: absolute; 107 | padding: 2px; 108 | color: #aaa; 109 | } 110 | 111 | /* Weekly View */ 112 | div.timegrid-event { 113 | position: absolute; 114 | width: 100px; 115 | background-color: #aaf; 116 | padding: 0; 117 | overflow: hidden; 118 | z-index: 5; 119 | } 120 | 121 | .timegrid-week-highlight { 122 | position: absolute; 123 | background-color: #eee; 124 | } 125 | 126 | .timegrid-event div { 127 | padding: 2px; 128 | } 129 | 130 | /* Monthly View */ 131 | div.timegrid-month-cell { 132 | position: absolute; 133 | padding: 0; 134 | overflow: hidden; 135 | } 136 | 137 | div.timegrid-month-cell-not-current { 138 | background-color: #F8F8F8; 139 | } 140 | 141 | div.timegrid-month-cell-now { 142 | background-color: #ccc; 143 | } 144 | 145 | ul.timegrid-event-list { 146 | list-style-position: inside; 147 | padding-left: .5em; 148 | } 149 | 150 | div.timegrid-month-label { 151 | position: absolute; 152 | text-align: center; 153 | width: 100%; 154 | z-index: 1; 155 | } 156 | 157 | div.timegrid-month-label span { 158 | display: block; 159 | font-size: 12em; 160 | font-weight: bold; 161 | color: #F0F0F0; 162 | } 163 | 164 | span.timegrid-month-date-label { 165 | position: absolute; 166 | right: 5px; 167 | top: 5px; 168 | color: #000; 169 | } 170 | 171 | /* Message */ 172 | .timegrid-message-container { 173 | position: absolute; 174 | top: 30%; 175 | left: 35%; 176 | right: 35%; 177 | z-index: 1000; 178 | display: none; 179 | } 180 | .timegrid-message { 181 | font-size: 120%; 182 | font-weight: bold; 183 | text-align: center; 184 | } 185 | -------------------------------------------------------------------------------- /docs/js/styles/util/views.css: -------------------------------------------------------------------------------- 1 | /*================================================== 2 | * Common styles for views 3 | *================================================== 4 | */ 5 | div.exhibit-views-unplottableMessage { 6 | padding: 1em; 7 | text-align: center; 8 | } 9 | .exhibit-views-unplottableCount { 10 | font-weight: bold; 11 | } 12 | .exhibit-views-totalCount { 13 | } 14 | 15 | div.exhibit-views-bubbleWithItems { 16 | } 17 | 18 | div.exhibit-collectionView { 19 | } 20 | 21 | div.exhibit-collectionView-header { 22 | } 23 | span.exhibit-collectionView-header-count { 24 | font-size: 200%; 25 | } 26 | span.exhibit-collectionView-header-types { 27 | padding-left: 0.5em; 28 | } 29 | span.exhibit-collectionView-header-details { 30 | padding-left: 0.5em; 31 | color: #888; 32 | } 33 | div.exhibit-collectionView-header-sortControls { 34 | text-align: center; 35 | margin: 1em 0; 36 | } 37 | .exhibit-collectionView-header-groupControls { 38 | cursor: pointer; 39 | } 40 | .exhibit-collectionView-header-duplicateControls { 41 | cursor: pointer; 42 | } 43 | 44 | div.exhibit-collectionView-body { 45 | } 46 | 47 | div.exhibit-collectionView-group { 48 | } 49 | 50 | span.exhibit-collectionView-group-count { 51 | } 52 | 53 | div.exhibit-collectionView-group-content { 54 | margin-left: 1em; 55 | } 56 | 57 | div.exhibit-collectionView-group h1 { 58 | font-size: 150%; 59 | margin: 1em 0; 60 | } 61 | 62 | div.exhibit-collectionView-group h2 { 63 | font-size: 120%; 64 | margin: 0.5em 0; 65 | } 66 | 67 | .exhibit-collectionView-group h3 { 68 | } 69 | 70 | div.exhibit-collectionView-footer { 71 | clear: both; 72 | text-align: center; 73 | margin: 2em 0; 74 | } 75 | 76 | div.exhibit-collectionView-pagingControls { 77 | margin: 1em 0; 78 | text-align: center; 79 | } 80 | 81 | .exhibit-collectionView-pagingControls-currentPage { 82 | padding: 0px 0.5em; 83 | font-weight: bold; 84 | } 85 | 86 | .exhibit-collectionView-pagingControls-page { 87 | padding: 0px 0.5em; 88 | } 89 | 90 | ul.exhibit-collectionView-pagingControls { 91 | clear: both; 92 | margin: 2em 0; 93 | text-align: center; 94 | } 95 | 96 | ul.exhibit-collectionView-pagingControls li { 97 | list-style-type: none; 98 | display: inline; 99 | } 100 | 101 | ul.exhibit-collectionView-pagingControls li a { 102 | border: 1px solid #90C2E1; 103 | background: #DFEDF7; 104 | padding: 2px 5px; 105 | text-decoration: none; 106 | } 107 | -------------------------------------------------------------------------------- /docs/js/styles/views/tabular-view.css: -------------------------------------------------------------------------------- 1 | table.exhibit-tabularView-body { 2 | width: 100%; 3 | } 4 | 5 | .exhibit-tabularView-columnHeader { 6 | cursor: pointer; 7 | white-space: pre; 8 | } 9 | 10 | .exhibit-tabularView-columnHeader-sorted { 11 | cursor: pointer; 12 | white-space: pre; 13 | } 14 | 15 | div.exhibit-tabularView-pagingControls { 16 | margin: 1em 0; 17 | text-align: center; 18 | } 19 | 20 | .exhibit-tabularView-pagingControls-currentPage { 21 | padding: 0px 0.5em; 22 | font-weight: bold; 23 | } 24 | 25 | .exhibit-tabularView-pagingControls-page { 26 | padding: 0px 0.5em; 27 | } 28 | -------------------------------------------------------------------------------- /docs/js/styles/views/thumbnail-view.css: -------------------------------------------------------------------------------- 1 | div.exhibit-thumbnailView-group { 2 | clear: both; 3 | } 4 | 5 | div.exhibit-thumbnailView-body { 6 | } 7 | 8 | div.exhibit-thumbnailView-itemContainer { 9 | float: left; 10 | display: inline; 11 | } 12 | -------------------------------------------------------------------------------- /docs/js/styles/views/tile-view.css: -------------------------------------------------------------------------------- 1 | table.exhibit-tileView-body { 2 | width: 100%; 3 | } 4 | 5 | .exhibit-tileView-body > tbody > tr > td:first-child { 6 | width: 3em; 7 | text-align: right; 8 | color: #aaa 9 | } 10 | 11 | td.exhibit-tileView-itemIndex { 12 | } -------------------------------------------------------------------------------- /docs/js/styles/views/view-panel.css: -------------------------------------------------------------------------------- 1 | /*================================================== 2 | * View Panel styles 3 | *================================================== 4 | */ 5 | div.exhibit-viewPanel { 6 | } 7 | 8 | div.exhibit-viewPanel-viewSelection { 9 | text-align: center; 10 | } 11 | 12 | span.exhibit-viewPanel-viewSelection-view { 13 | text-transform: uppercase; 14 | cursor: pointer; 15 | } 16 | 17 | span.exhibit-viewPanel-viewSelection-selectedView { 18 | text-transform: uppercase; 19 | font-weight: bold; 20 | border-bottom: 3px solid red; 21 | } 22 | 23 | div.exhibit-viewPanel-viewContainer { 24 | } 25 | 26 | -------------------------------------------------------------------------------- /docs/js/styles/widgets/bookmark-widget.css: -------------------------------------------------------------------------------- 1 | div.exhibit-bookmarkWidget-popup { 2 | display: inline; 3 | text-align: right; 4 | } 5 | 6 | img.exhibit-bookmarkWidget-button { 7 | cursor: pointer; 8 | margin: 0px 1px; 9 | } 10 | -------------------------------------------------------------------------------- /docs/js/styles/widgets/collection-summary-widget.css: -------------------------------------------------------------------------------- 1 | /*================================================== 2 | * Collection Summary Widget styles 3 | *================================================== 4 | */ 5 | div.exhibit-collectionSummaryWidget { 6 | } 7 | span.exhibit-collectionSummaryWidget-count { 8 | font-size: 200%; 9 | } 10 | span.exhibit-collectionSummaryWidget-results { 11 | } 12 | -------------------------------------------------------------------------------- /docs/js/styles/widgets/legend-widget.css: -------------------------------------------------------------------------------- 1 | div.exhibit-legendWidget { 2 | margin: 1em 0; 3 | text-align: center; 4 | line-height: 2em; 5 | } 6 | span.exhibit-legendWidget-entry { 7 | white-space: nowrap; 8 | } 9 | span.exhibit-legendWidget-entry-title { 10 | font-weight: bold; 11 | } 12 | span.exhibit-legendWidget-entry-swatch { 13 | border: 1px solid #888; 14 | padding: 0px 3px; 15 | } 16 | -------------------------------------------------------------------------------- /docs/js/styles/widgets/option-widget.css: -------------------------------------------------------------------------------- 1 | .exhibit-optionWidget { 2 | cursor: pointer; 3 | } 4 | 5 | .exhibit-optionWidget img { 6 | vertical-align: middle; 7 | } 8 | -------------------------------------------------------------------------------- /docs/js/styles/widgets/reset-history-widget.css: -------------------------------------------------------------------------------- 1 | .exhibit-resetHistoryWidget-button { 2 | cursor: pointer; 3 | } -------------------------------------------------------------------------------- /docs/js/styles/widgets/resizable-div-widget.css: -------------------------------------------------------------------------------- 1 | /*================================================== 2 | * Resizable Div Widget styles 3 | *================================================== 4 | */ 5 | div.exhibit-resizableDivWidget-resizer { 6 | text-align: center; 7 | cursor: s-resize; 8 | height: 15px; 9 | clear: both; 10 | } 11 | -------------------------------------------------------------------------------- /docs/js/styles/widgets/toolbox-widget.css: -------------------------------------------------------------------------------- 1 | div.exhibit-toolboxWidget-popup { 2 | text-align: right; 3 | z-index: 1000; 4 | } 5 | 6 | img.exhibit-toolboxWidget-button { 7 | cursor: pointer; 8 | margin: 0px 1px; 9 | } -------------------------------------------------------------------------------- /docs/mapa.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lmorillas/python_events/8a5f3fec8498de7cab69c35a2d9554acfe1b78ea/docs/mapa.png -------------------------------------------------------------------------------- /docs/sitemap.xml: -------------------------------------------------------------------------------- 1 | https://lmorillas.github.io/python_events/daily1 2 | -------------------------------------------------------------------------------- /geocache.dat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lmorillas/python_events/8a5f3fec8498de7cab69c35a2d9554acfe1b78ea/geocache.dat -------------------------------------------------------------------------------- /requirements.txt: -------------------------------------------------------------------------------- 1 | asn1crypto==0.24.0 2 | backcall==0.1.0 3 | cachetools==2.1.0 4 | cffi==1.12.3 5 | cryptography==2.6.1 6 | decorator==4.3.0 7 | geographiclib==1.49 8 | geopy==1.14.0 9 | google-api-python-client==1.7.3 10 | google-auth==1.5.0 11 | google-auth-httplib2==0.0.3 12 | httplib2==0.11.3 13 | idna==2.7 14 | ipython==6.4.0 15 | ipython-genutils==0.2.0 16 | jedi==0.12.0 17 | oauth2client==1.5.2 18 | parso==0.2.1 19 | pexpect==4.6.0 20 | pickleshare==0.7.4 21 | pkg-resources==0.0.0 22 | prompt-toolkit==1.0.15 23 | ptyprocess==0.5.2 24 | pyasn1==0.4.3 25 | pyasn1-modules==0.2.1 26 | pycparser==2.19 27 | pycrypto==2.6.1 28 | Pygments==2.2.0 29 | pyOpenSSL==19.0.0 30 | pytz==2018.4 31 | rsa==3.4.2 32 | simplegeneric==0.8.1 33 | simplejson==3.16.0 34 | six==1.12.0 35 | traitlets==4.3.2 36 | uritemplate==3.0.0 37 | wcwidth==0.1.7 38 | --------------------------------------------------------------------------------