simile-widgets / exhibit Goto Github PK
View Code? Open in Web Editor NEWPublishing Framework for Large-Scale Data-Rich Interactive Web Pages
License: MIT License
Publishing Framework for Large-Scale Data-Rich Interactive Web Pages
License: MIT License
It would be nice to make possible to use marker clusters (google maps support them, as well as such services as Leaflet).
In the changes from 3.0.0rc1 to 3.1.0rc, code was introduced that uses "document.location.search" unfortunately ".search" is undefined on IE8 so Exhibit fails.
I know that IE8 is old but right now we are stuck with it. Any chance on making a fix so that 3.1.0rc and later still works on IE8?
Thanks.
Charles
I'm using django to create URLs for exhibit lenses, and that does a iri_to_url, which url-escapes the {{ }} that I passed in.
I'm currently working around that by decodeURI() on the value in the subcontent parser:
diff --git a/elmo/static/simile/exhibit/scripts/ui/lens.js b/elmo/static/simile/exhibit/scripts/ui/lens.js
index 54589df..8f34e7f 100644
--- a/elmo/static/simile/exhibit/scripts/ui/lens.js
+++ b/elmo/static/simile/exhibit/scripts/ui/lens.js
@@ -495,6 +495,8 @@ Exhibit.Lens._parseSubcontentAttribute = function(value) {
var fragments, current, open, close;
fragments = [];
current = 0;
+ /* XXX Hack: django encodes IRIs, decode this here */
+ value = decodeURI(value);
while (current < value.length && (open = value.indexOf("{{", current)) >= 0) {
close = value.indexOf("}}", open);
if (close < 0) {
@karger, do you have an opinion on whether this is good for exhibit to do or not?
I want to access the data filed id
of an item in a lense
, but it is empty.
If I take the flag demo and change the the .code
to .id
in the lense, I get nothing.
https://github.com/simile-widgets/exhibit/tree/master/scripted/demos/flags
<div data-ex-role="lens" style="display: none;" class="map-lens">
<div class="flag-container">
<img data-ex-src-subcontent="http://upload.wikimedia.org/wikipedia/commons/thumb/9/9a/Flag_of_{{.label}}.svg/200px-Flag_of_{{.label}}.svg.png" alt="wikipedia flag image"/>
</div>
<div><b data-ex-content=".label"></b> [<span data-ex-content=".code"></span>]</div>
<div>(Image from Wikipedia)</div>
</div>
change the third last line to
<div><b data-ex-content=".label"></b> [<span data-ex-content=".id"></span>]</div>
is this the expected behavior? Is there any other way of accessing the id
of an item?
(I know in this example the value of id
is duplicated to code
, but my source is bibsonomy json output and it has an id
, which is not reproducible from any other field.
[EDIT] Actually in my case I found out, it is possible to reproduce the id from the other values, by doing concat('http://www.bibsonomy.org/bibtex/', .intraHash, '/', .user)
or more precise concat('http://www.bibsonomy.org/bibtex/2', .intraHash, '/', .user)
rt
Hi,
I found one problem in building the hierarchical facet, it creates the duplicated entries.
I pasted here the fix i made, from hierarchical-facet.js
replace if (!valueSet.contains(parentValue)) {
by if (!values.contains(parentValue)) {
Regards,
Quyen
Demo Link :http://simile-widgets.org/exhibit/examples/presidents/presidents.html
Json data: http://simile-widgets.org/exhibit/examples/presidents/presidents.js
If you look at the json file for the above US president demo, there are 8 presidents whose religion is mentioned as 'Episcopal' but in the facet, it lists as only 7.
Digging further, I noticed that the facet is counting only the first value in the array.
It's ignoring the rest.
'George Washington' has following data for religion - he is excluded in the facet search for 'Episcopal'
"religion": [
"Anglican",
"Episcopal",
"Deist"
]
'Deist' is also not listed in the facet, as it appears only once in json file and is not the first item in the array.
There's a lot of code shared between these two facets. Create an EnumeratedFacet class and then refactor code from the ListFacet and CloudFacet into that parent class.
In the end, ListFacet and CloudFacet should contain minimal code -- just how to render the items.
You'll probably want to:
When comparing for equality, the operator doesn't try to parse numbers, and thus always comes back with false.
In a way this is due to the fact that you can put Strings, Numbers and Booleans into an Exhibit.Set, but it only returns Strings.
ES6 has a real Set, but that probably breaks browser compat. Maybe use a shim that's out there?
Also, changing the semantics of Exhibit.Set() might break a ton of sites, sadly.
We should improve and reorganize exhibit documentation.
Old exhibit 2 and exhibit 3 docs are mixed.
Do you have a plan about it @karger ?
Please consider http://www.simile-widgets.org/exhibit/examples/senate/senate.html as an example. Is it possible to create another view with committees linked to the selected senators only? So, if some bill is selected in the sponsoring facet, only committees that have members that sponsored that bill should be shown.
If I would create a tabular view with the expression .committeeMember
, the committees are shown as lists: multiple per senator, one senator per row. What I'd like to do is sort of change the item type of the view to committee, so that every committee has one row, and duplicates are removed.
Is something like that possible? I cannot find a demo that does something similar. When the collection of the view is changed, the facets don't work for that view any more.
we are using the Exhibit Timeline 3.0 in our website. We are displaying the StartDate and Enddate in the popup of each event as a label. But we need to display a textfield at there with the dates of event with a calendar.
We are able to add a text field(<input type="text" .....) but how we can give the value of the event to textfield.
I'm trying from last couple of days.
Thanks in Advance.
Please take a look at the following page (source code below): http://exhibit.camilstaps.nl/display-none.html.
I have my facets in a container with display:none;
to show them on a later moment. When I click 'toggle facets', the facets are shown but are empty. Is that by design / how do I resolve this?
This is the relevant HTML. I'm using the data of the senate example.
<div data-ex-role="collection" data-ex-item-types="Senator"></div>
<table>
<tr>
<td>
<button id="toggle-facets">Toggle facets</button>
<div id="facet-list" style="display:none;">
<div data-ex-role="facet"
data-ex-expression=".party"></div>
<div data-ex-role="facet"
data-ex-expression=".state"></div>
</div>
</td>
<td>
<div data-ex-role="viewPanel">
<div data-ex-role="view"
data-ex-view-class="Tabular"
data-ex-columns=".label, .party, .state"
data-ex-columns="name, party, state"></div>
</div>
</td>
</tr>
</table>
Exhibit is generally used to create widgets that are configured based on attributes in dom elements describing the widgets. However, the codebase is cluttered with alternative code that configures an element based on a passed-in "configuration" js object. I don't think this code has been used for years, if ever, and I suspect it will break immediately if anyone tries to use it.
As one concrete example, util/settings.js implements a "_internalCollectSettings" method (used for configuring from dom and js object) that reads values from the configuration and uses them to determine settings for the widget. When you read values from a dom object, you'll always get strings. But if you read from a configuration object you might get other types. internalCollectSettings seems to be trying to prepare for this, since to decide whether to process a value it tests for (typeof value === "string" && value.length ? 0) || (typeof value !== "string") . However, once the test is passed and internalCollectSettings begins to process the value, it invokes "value.split(;)" which is going to throw an error on anything but a string, which means non-string values won't be incorporated in the settings.
More generally, there are lots of inconsistent code pathways based on whether you invoke configure() or configureFromDom() and I'm pretty sure the inconsistency means the configure() methods just won't work right. For example, in list-facet.js there is significant code duplication between configureFromDom() and configure(), even though configureFromDom calls configure.
I'd like to clean up this clutter. The most aggressive way to do this would be simply to remove all the functions that configure from a js object instead of a dom node. If anyone is using these functions, please speak up! A somewhat less aggressive approach would be to better merge the configure() and configureFromDom() methods so that configure is less reliant on never-used code. However I still won't be testing the non-dom pathways, so there's no guarantee they'll work.
When a google spreadsheet import reports an empty string in a cell, that empty string is assigned as the value of the corresponding item property in exhibit. This causes tests like if-exists to return true. It seems more intuitive and consistent for an empty string to be treated as a null, so the corresponding property is taken to be not defined on the given item.
(eventual goal: render buildSettingsFromDOM
unnecessary)
Just wondering if 'dist' folder can be uploaded as well. It will greatly help non-java users to simply copy/paste the dist folder for the development (scripted only). I don't think it's necessary for all users to download and install ant. Not everyone is familiar with ant..
The exhibit repository makes heavy use of symlinks in its tools directory, so that non-versioned names of e.g. jar files can be linked to the specific version currently in the repo. Symlinks don't check out into windows properly, so none of the java based tools (yuicompressor, jslint, etc) can run.
Apparently there is a way to help git handle symlinks on windows: http://stackoverflow.com/questions/5917249/git-symlinks-in-windows But this is above my pay grade.
Given that git is all about version control, is it even necessary to have the tools in the repo with their specific version numbers? Why not just incorporate whichever version we need using the unqualified file name (without version numbers) and indicate (changing) version numbers in commit messages?
Hello!
I am using the plugin and I need to make an element in every item of the list draggable. So I am adding element with class 'draggable' to the lens
<div data-ex-role="lens">
<span data-ex-content=".hour"></span>: <span data-ex-content=".label"></span>
<img class="draggable" data-ex-src-content=".image" />
</div>
And call draggable ui to this class
<script type="text/javascript">
$(document).ready(function(){
$(".draggable").draggable({});
});
</script>
The problem is that after any filtering and grouping the elements are rerendered, so drag does not work any more. The only event I could bind this to is 'DOMSubtreeModified' but is it a right solution? Is there any exhibit event after rerendering the view?
exhibitConfigured.exhibit did not help
It appears that the standard design for views is a "reconstruct" method that gets called when they need to be regenerated based on changes to the underlying collection. This reconstruct method is called through two different pathways:
Right now, it seems that a change to the collection via a facet interaction causes both a direct change in the collection and a change to the history state, so the reconstruct method gets called twice for each collection change. This makes exhibit twice as slow, and also introduces some bugs due to races between the two rerenders. For example, in the tabular view, changing the collection resets the paginated page to zero (important if the number of items shrinks so you don't see an empty page) but importState does not. When importState runs first, you end up with a view showing no results because you're on the wrong page.
Sometimes, when reloaded, timeline raises a TypeError: Timeline.DefaultEventSource is not a constructor and doesn't draw the timeline.
For example with http://simile-widgets.org/exhibit3/examples/cereals/cereal-characters.html
TypeError: Timeline.DefaultEventSource is not a constructor
Exhibit.TimelineView.prototype._initializeUI()time-ex...ndle.js (línea 1)
Exhibit.TimelineView.createFromDOM()time-ex...ndle.js (línea 1)
Exhibit.ViewPanel.prototype._createView()exhibit...ndle.js (línea 1)
Exhibit.ViewPanel.prototype._switchView()exhibit...ndle.js (línea 1)
Exhibit.ViewPanel.prototype.importState()exhibit...ndle.js (línea 1)
Exhibit.History.stateListener()exhibit...ndle.js (línea 1)
Exhibit.History.init()exhibit...ndle.js (línea 1)
exhibit-scripted-bundle.js()exhibit...ndle.js (línea 1)
.on/e()jquery-....min.js (línea 3)
f.event.dispatch()jquery-....min.js (línea 3)
f.event.add/i()jquery-....min.js (línea 3)
f.event.trigger()jquery-....min.js (línea 3)
.trigger/<()jquery-....min.js (línea 3)
f</<.each()jquery-....min.js (línea 2)
f</e.prototype.each()jquery-....min.js (línea 2)
.trigger()jquery-....min.js (línea 3)
Exhibit._Impl.prototype.configureFromDOM()exhibit...ndle.js (línea 1)
Exhibit.autoCreate/fDone()exhibit...ndle.js (línea 1)
.on/e()jquery-....min.js (línea 3)
f.event.dispatch()jquery-....min.js (línea 3)
f.event.add/i()jquery-....min.js (línea 3)
f.event.trigger()jquery-....min.js (línea 3)
.trigger/<()jquery-....min.js (línea 3)
f</<.each()jquery-....min.js (línea 2)
f</e.prototype.each()jquery-....min.js (línea 2)
.trigger()jquery-....min.js (línea 3)
Exhibit.Database._LocalImpl.prototype._loadLinks/fNext()exhibit...ndle.js (línea 1)
Exhibit.Importer.prototype.load/finish()exhibit...ndle.js (línea 1)
Exhibit.Database._LocalImpl.prototype.loadItems/wrapFinish()exhibit...ndle.js (línea 1)
...est,latest,totalDuration,totalEventCount,totalDensity,intervalDuration,eventsPer...
time-ex...ndle.js (línea 1)
TypeError: Timeline.DefaultEventSource is not a constructor
Exhibit.Debug.exception/f(e2=
TypeError: Timeline.DefaultEventSource is not a constructor
...est,latest,totalDuration,totalEventCount,totalDensity,intervalDuration,eventsPer...
, msg2=undefined)exhibit...ndle.js (línea 1)
Exhibit.Debug.exception(e=
TypeError: Timeline.DefaultEventSource is not a constructor
...est,latest,totalDuration,totalEventCount,totalDensity,intervalDuration,eventsPer...
, msg=undefined)exhibit...ndle.js (línea 1)
Exhibit.ViewPanel.prototype._createView()exhibit...ndle.js (línea 1)
Exhibit.ViewPanel.prototype._switchView(newIndex=1)exhibit...ndle.js (línea 1)
Exhibit.ViewPanel.prototype.importState(state=Object { viewIndex=1})exhibit...ndle.js (línea 1)
Exhibit.History.stateListener(evt=undefined)exhibit...ndle.js (línea 1)
Exhibit.History.init(ex=Object { _database={...}, _uiContext={...}, _registry={...}, más...}, persist=true)exhibit...ndle.js (línea 1)
exhibit-scripted-bundle.js(evt=Object { type="exhibitConfigured", timeStamp=1441215515284, jQuery17209661653833930088=true, más...}, ex=Object { _database={...}, _uiContext={...}, _registry={...}, más...})exhibit...ndle.js (línea 1)
.on/e(a=Object { type="exhibitConfigured", timeStamp=1441215515284, jQuery17209661653833930088=true, más...})jquery-....min.js (línea 3)
f.event.dispatch(c=Object { type="exhibitConfigured", timeStamp=1441215515284, jQuery17209661653833930088=true, más...})jquery-....min.js (línea 3)
f.event.add/i(a=Object { type="exhibitConfigured", timeStamp=1441215515284, jQuery17209661653833930088=true, más...})jquery-....min.js (línea 3)
f.event.trigger(c=Object { type="exhibitConfigured", timeStamp=1441215515284, jQuery17209661653833930088=true, más...}, d=[Object { type="exhibitConfigured", timeStamp=1441215515284, jQuery17209661653833930088=true, más...}, Object { _database={...}, _uiContext={...}, _registry={...}, más...}], e=Document cereal-characters.html, g=undefined)jquery-....min.js (línea 3)
.trigger/<()jquery-....min.js (línea 3)
f</<.each(a=Object[Document cereal-characters.html], c=function(), d=undefined)jquery-....min.js (línea 2)
f</e.prototype.each(a=function(), b=undefined)jquery-....min.js (línea 2)
.trigger(a="exhibitConfigured.exhibit", b=Object { _database={...}, _uiContext={...}, _registry={...}, más...})jquery-....min.js (línea 3)
Exhibit._Impl.prototype.configureFromDOM(root=undefined)exhibit...ndle.js (línea 1)
Exhibit.autoCreate/fDone()exhibit...ndle.js (línea 1)
.on/e(a=Object { type="dataload", timeStamp=1441215514480, jQuery17209661653833930088=true, más...})jquery-....min.js (línea 3)
f.event.dispatch(c=Object { type="dataload", timeStamp=1441215514480, jQuery17209661653833930088=true, más...})jquery-....min.js (línea 3)
f.event.add/i(a=Object { type="dataload", timeStamp=1441215514480, jQuery17209661653833930088=true, más...})jquery-....min.js (línea 3)
f.event.trigger(c=Object { type="dataload", timeStamp=1441215514480, jQuery17209661653833930088=true, más...}, d=[Object { type="dataload", timeStamp=1441215514480, jQuery17209661653833930088=true, más...}], e=body, g=undefined)jquery-....min.js (línea 3)
.trigger/<()jquery-....min.js (línea 3)
f</<.each(a=Object[body], c=function(), d=undefined)jquery-....min.js (línea 2)
f</e.prototype.each(a=function(), b=undefined)jquery-....min.js (línea 2)
.trigger(a="dataload.exhibit", b=undefined)jquery-....min.js (línea 3)
Exhibit.Database._LocalImpl.prototype._loadLinks/fNext()exhibit...ndle.js (línea 1)
Exhibit.Importer.prototype.load/finish()exhibit...ndle.js (línea 1)
Exhibit.Database._LocalImpl.prototype.loadItems/wrapFinish()exhibit...ndle.js (línea 1)
...=function(){Exhibit.Backwards.enabled.Attributes=true;Exhibit.getAttribute=Exhib...
(see s-w mailing list)
We use various 3d-party libraries, and include their minified versions in the repository. I think it would be better to include the non-minified versions. This can be useful during debugging, and our build process minifies the entire library anyway.
Browsers cache the json returned from a html links
Ideally, Exhibit is using the latest json data.
We can prevent caching by appending a random number:
<link href="senators.json?i=232323.232323" type="application/json" rel="exhibit-data" />
We can generate this HTML dynamically
// create an HTML head link with optional cache buster
function loadExhibitResource(file, opts ){
if (opts && opts.cache && opts.cache === 'no') file += "?i="+(Math.random()*99999999);
var link = document.createElement("link");
link.href = file;
link.type = 'application/json';
link.rel = 'exhibit-data';
document.getElementsByTagName("head")[0].appendChild(link);
}
loadExhibitResource('senators.json', {cache: no} );
Looking at this site:
http://www.strictly-israeli-dancing.co.uk/dances.htm
If you advance to a high numbered page, then filter to a small number of items, nothing is displayed---presumably because the view thinks it's still on a high page, while the item is on a low page. Pagination should reset (perhaps to last page?) if a filter is changed that reduces the number of items to less than what would be on the current page.
Hi all,
I have this facet:
<div data-ex-role="facet" data-ex-expression=".ente_destinatario"
data-ex-facet-label="Ente destinatario"
data-ex-missing-label="Dato non presente"
data-ex-sort-mode="count">
</div>
But the missing label does not appear. Is it something wrong on my code?
I'm using http://api.simile-widgets.org/exhibit/current/exhibit-api.js
Thank you
Hi,
I have used Exhibit for an open source project and thank you for building such a nice tool.
I would like to make a suggestion. It would be really useful if on the wiki page of component overview (https://github.com/simile-widgets/exhibit/wiki/Component-Overview), you could create an architecture picture of exhibit. As it has quite complicated architecture, with different components and layers and they interact with each other.
I have worked Exhibit for more than half year, and now I am still struggling with it if I need to modify something. So I think with the clear architecture picture, at least I know which direction to go, when I want to make a change.
Thank you,
Quyen
In old exhibit there were several maps backends (including openlayers).
Are there any plans to implement some of those in exhibit3?
I.e., read the attribute "FOO" and place in setting "BAR"
As I understand, it is possible to do something like the following:
<div data-ex-role="view"
data-ex-view-class="Tabular"
data-ex-label="Compare Their Wealth"
data-ex-columns=".number, .ageAtPeak, .wealth, .origin, .origin-country, .company"
data-ex-column-labels="rank & name, age at peak, wealth in billion USD, origin, country of origin, company"
data-ex-sort-column="0"
data-ex-sort-ascending="true"
>
<table style="display:none;">
<tr>
<td>
<span data-ex-content=".number"></span>:
<span data-ex-content=".label"></span>
</td>
<td><div data-ex-content=".ageAtPeak"></div></td>
<td><div data-ex-content=".wealth"></div></td>
<td><div data-ex-content=".origin"></div></td>
<td><div data-ex-content=".origin-country"></div></td>
<td><div data-ex-content=".company"></div></td>
</tr>
</table>
</div>
This would make it possible to sort on the .number
, while displaying both .number
and .label
in one column. (This isn't useful in this example, but is in other cases).
This was possible on 3.1.2-rc1
(it showed e.g. "1: John Davison Rockefeller"), but isn't possible any longer on the current master
(it now shows e.g. "1"). I created a sample at http://conversationaltorah.camilstaps.nl/billionaires.html, which is a copy of the billionaires demo adapted to show the problem. The code it uses is 138dd86, with #173 and #174 merged in (these PRs don't affect this, and I need them on another page).
I did some testing:
My (possibly premature) conclusion is that something went wrong in #169.
We are using the Exhibit Timeline in our project. we are able to display the filters and timeline.
When we clicking the reset filters it is working fine.
But we need to clear/reset the filters using javascript in our webpage.
I'm trying out from last four days. Please help me out.
Thanks in Advance...
Hi,
I'm starting to learn exhibit using your demo. In the senate one, if I click on map view it seems not work properly, it remains in loop. My page is here http://aborruso.github.io/exhibit/scripted/demos/senate/senate.html
I have this error:
Uncaught TypeError: Property 'jQuery' of object # is not a function
What's wrong?
Thank you
If I have data containing a list of projects and the countries where the projects are implemented (one project can belong to multiple countries), what is the best way to show all projects for only one country?
If I use country as one of the facet, it displays marker on the selected country as well as other countries where the same project is implemented.
For instance, say, project X is implemented in US and Canada. If I set country as a facet and select only 'US', a marker appears in both US and Canada. I want to display only one marker when user selects specific country.
If the project and country association is one to one, there's no issue but in this case, one project can be associated with multiple countries. Any solution/suggestion?
Is it currently possible to highlight/add markers to regions on a map, instead of just lat/lng points? Would it, for example, be possible to adapt http://www.simile-widgets.org/exhibit/examples/flags/flags.html to colour each country differently?
Exhibit 3.0. Here we are creating the JSON data as a text file and assigning the text file as a link href to the page. The scripts are loading the data.
But we no need to create the JSON data as a text file. We need to pass the JSON data directly to the script...
Please help me out.
Thanks in Advance.
Hi all,
I would like to use OSM in my exhibit, but it's not available. Is there some undocumented way to use it?
Thank you,
Andrea
We use the slider facet quite extensively on l10n.mozilla.org, so I'll take a stab at porting that to exhibit3, so we can migrate.
Does Exhibit support syncing between the map and timeline? For instance, I may not want to see Lincoln on the map when the timeline is in the 2000s. Thanks!
This is maybe not a bug but a behavior change from Exhibit 2.x to Exhibit 3.x.
Description:
I have few lenses defined for different objects. When I click an object (from a table/tile/map) its lens is showed, this lens contains some links to other objects/lens on which I can click.
In exhibit 2 [1], clicking a link from an open lens just opens and replaces the previous lens by the clicked object (and this is very useful for browsing linked data/objects), while
In exhibit 3 [2], the clicked link to another object-lens does nothing, you have to close the open lens to be able to open another one from your table/tile/map (and you can't browse the "path" through your objects).
In some way, you can have one "popup" lens but cannot click that "popup" lens to browse and replace it with another object/popup/lens.
I don't think this is a browser issue, as it behaves the same way using FireFox or IE on Windows 7 in my case.
I'll be pleased to provide additional description/example if it helps.
All suggestion are welcome.
Thanks a lot for this great project !
[1] i.e. http://static.simile.mit.edu/exhibit/api-2.1.0/exhibit-api.js
[2] i.e. http://api.simile-widgets.org/exhibit/HEAD/exhibit-api.js
I'm currently using exhibit in a single page ember application. Exhibit loads just fine the first time the page is viewed however when the page is revisited it no longer loads. I'm guessing I need to somehow reset exhibit so it will properly reload.
I tried doing Exhibit = undefined
however it doesn't seem to completely reset things.
The Exhibit.Database: _indexPut test seems to have regressed, I guess mosty due to optimizations that avoided the single element array.
Exhibit currently implements its own parser both for exhibit expressions and lenses. Standard parser generators exist (e.g. jison) which can take grammars for these things and produce the right parsers. This would make the code more understandable and modifiable.
As of 22 June 2016, Google Maps require a key for new sites, i.e. sites first using Google Maps after that date. See https://developers.google.com/maps/pricing-and-plans/standard-plan-2016-update
@karger are you thinking about it?
Hi
I cant get this to work. Any help or links to working model greatly appreciated.
Kind regards
J
The "Type" would be the same (string, int, etc...) and there would be an eventual Dimension property. If "Dimension" is "*", then it interprets the value as a list.
The following is a part of a custom lens template (for an image src tag) that is failing in the map view:
ex:src-content=".thumbnail"
An example of a definition for .thumbnail is -
When I inspect this element with FireFox Web Tools and 'Copy Outer HTML' it shows the following -
I use the same definition with both timeline and tabular views - which do not encode '&' - and therefore work as expected.
Note that this has become an issue since moving to Exhibit Version 3.0. Also note that this same Map Lens Template displays properly in IE. But I saw in the code where there is a fall-back to Version 2.0 for IE - which was very confusing at first.
I have scoured the source and cannot isolate where this might be happening.
See http://clearinghouse.marinedebris.noaa.gov/visualize for the site this is hosted on.
Thanks in advance for any insight.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.