Giter VIP home page Giter VIP logo

eureka's Introduction

Eureka 🌲

Build Status npm version

Eureka is a progressively enhanced flexible media browser. Connected to your media sources through a REST API, this accessible web component allows users to browse media sources, upload files, and choose media items.

🤗 Try the demo.

With eureka.js users will be saying "I found it!" in no time.   — @mrktps

💬 Discuss

Join the conversation in our public Gitter chat room.

Join the chat at https://gitter.im/jpdevries/eureka

📚 Wiki

Don't forget to browse the Wiki for more information on the REST API, patterns, screenshots and more.

🍻 Support

The Eureka Media Browser and supporting resources are provided free as in beer.
Gratuities are accepted through Square Cash.

🏋️‍♀️ Weigh In

The Eureka Media Browser is pretty lightweight all things considered.

Asset Weight (GZIP minified)
CSS Stylesheet 7.83kB
SVG Icons 7.88kB
React Component 75.83kB

Have a gander at our Webpack Visualizer 👀 .

📄 HTML–first

As a progressively enhanced web component, Eureka is functional HTML–first. This means that technically anything other than the initial HTML layer is a non–critical enhancement. Critical features supported by the HTML layer, such as browse, upload, and choose, are universally supported and do not depend on modern browsers, CSS styles, or script.

😲 Take a gander at Eureka in the nued by waking our incredibly lightweight raw HTML example.

We also encourage you to temporarily disable JavaScript in your browser and party with Eureka like it's 1999.

Powered By 🚀

  • Progressively Enhanced from HTML components
  • All–new Virtual DOM powered by React/Redux
  • Node Server Side Rendering
  • Node testing server

Highlights 🖋

  • Configurable Rest API endpoints
  • Browse multiple media sources for images
  • Drag and Drop Upload Support
  • Flexible Layout
  • Responsive Design
  • Save Data with responsive thumbnails
  • Configurable Styles via CSS Variables
  • Accessible
    • supports mobile and touch devices
    • supports .no-js via server side rendering
    • ARIA & Keyboard Support
    • high contrast themes

🚥 Features

The level of isomorphism between the client and server side one can achieve with Node is unmatched. Eureka takes advantage of this unique strength of Node by, through an isomorphic server and standard synchronous forms, achieving full support for critical features.

No features rely solely on sight or the use of a mouse. Keyboard use is supported. Accommodations are taken for users that benefit from high contrast themes. Visually hidden text is used to convey aspects of the interface that are otherwise visually implied to screen readers and assistive technology.

The semantic HTML layer remains usable even absent of style as pure HTML.

Support of features against browser environments
Feature .no-js < IE 9 Chrome Safari Firefox IE 11 Edge
Upload multiple files
Browse directories
Choose a media item
Keyboard Support
ARIA Support ✳️
WCAG Level AA
Internationalization
Download Item
Choose Multiple Items
Delete Multiple Items
Keyboard Shortcuts
Crop Images
Paste to Upload
Media Source panel
Async UX
Filterable Data Table
Sortable Data Table
Drag 'n drop uploads
Grid Layout
Flexible Layout
View Chooser
Masonry Layout Mode
Pathbar
Rename Item
Delete Item
Download Multiple Items
Local Storage
Variable Styles
Accessible Themes
Mobile First Layout ✳️
Fullscreen Mode
HTML5 Context Menus 🔧
HTML5 Details ✳️ ✳️
HTML5 Datalist ✳️ ✳️ ✳️

🛠 Usage

npm install eureka-browser --save

Bower

You can also install Eureka via Bower, which is a good way to fetch its stylesheet and icon sprite. There is also a UMD export of the EurekaMediaBrowser component for the unlikely case you'll need it.

npm install -g bower
bower install eureka-browser#release-2.0
ls bower_components/eureka-browser/client/build/assets/css/ # default eureka theme
ls bower_components/eureka-browser/client/build/assets/img # icon sprite
ls bower_components/eureka-browser/client/build/assets/js # bundled and unbundled UMD exports of EurekaMediaBrowser component

HTML

The <EurekaMediaBrowser> React component is styled by a standard CSS stylesheet. Include the CSS for the appropriate version of the media browser. Reference the theming section for more information on styling Eureka.

<link rel="stylesheet" type="text/css" media="screen" href="bower_components/eureka-browser/client/build/assets/css/eureka.0.0.20.min.css">
<div id="eureka-root">
  <!-- for performance, optimization, and accessibility it best to support server-side rendering by initially delivering a base HTML layer
  see server-side rendering below -->
</div>

JS

import React from 'react';
import ReactDOM from 'react-dom';
import { EurekaMediaBrowser } from 'eureka-browser';

ReactDOM.render(
  <EurekaMediaBrowser />,
  document.getElementById('eureka-root')
);

Eureka will then be injected into the DOM and eagerly reach out to the REST API for the JSON data it needs to offer the interface.

Configure the EurekaMediaBrowser via the optional attributes found in the default configuration below:

  <EurekaMediaBrowser
    basePath="/"
    allowUploads={true}
    treeHidden={true}
    useLocalStorage={true}
    storagePrefix="eureka__"
    allowRename={true}
    allowDelete={true}
    confirmBeforeDelete={false}
    locale="en-US"
    mediaSource="0"
    currentDirectory="/"
    headers={{
        'Powered-By': 'Eureka by Markup.tips'
    }}
    intervals={{
      searchBarPlaceholder: false,
      fetchDirectoryContents: 18000,
      updateSourceTree: false
    }}
  />

⚙️ Options

Option Default Description
basePath "/" Prepended to URLs for XHR requests to the Rest API.
Set to the absolute path of your Rest API.
allowUploads true Whether or not to allow uploading of media items
treeHidden true Whether or not the Media Source Panel "sidebar" should be initially closed
useLocalStorage true Whether or not to use the JavaScript localStorage API to remember session data such as the last visited directory and view mode preference
storagePrefix "eureka__" Prepended to localStorage keys
allowRename true Whether or not to offer users the ability to rename directories and media items
allowDelete true Whether or not to offer users the ability to delete directories and media items
allowDownload false Whether or not to add a download button to media items
confirmBeforeDelete false Whether or not to confirm intent before users delete directories and media items
locale "en-US" The localization to use. See Lexicons.
mediaSource undefined The default initial media source id to use
currentDirectory "/" The default initial directory to use
uid "0" A unique identifier used to ensure multiple <EurekaMediaBrowser> components on the same page do not share the same DOM ids
assetsBasePath "./assets/" Relative path to the Eureka assets directory
iconSVG "./img/icons.svg" Path, relative to assetsBasePath, to the Eureka icon sprite sheet
callbacks {close: undefined, choose: undefined} Object containing close and choose callbacks
headers {'Powered-By': 'Eureka by Markup.tips'} Additional request headers sent with XHR requests
intervals {searchBarPlaceholder: false,fetchDirectoryContents: 18000,updateSourceTree: false} Intervals for whether or not and how often to do things like hit the REST API for updated data or update the placeholder attribute based on the current directory listing
enlargeFocusedRows false Whether or not to enlarge thumbnails of focused rows
mode "table" Initial view mode (table, thumb, grid, list)
sort "name" Initial column to sort media items on
allowFullscreen true Whether or not the interface should offer a fullscreen button
emphasisFocusedMediaItem true Whether or not to emphasis selected media items (defaults to emphasizing the filename, only applies to table and list view modes)
doDragNDrop true Whether or not to enable drag 'n drop features
allowChooseMultiple true Whether or not to allow multiple files to be chosen
allowInvertSelection true Whether or not to allow selection of multiple items to be inverted
allowDownloadMultiple true Whether or not to allow multiple selected items to be download as a zip file

Please take note that when useLocalStorage is true any options manually passed in as props will take precedent.

🌐 Browser Support

The server side rendering and HTML–first design patterns begin progressively enhancing a universally supported HTML layer. So basic features are supported in any browser. JavaScript support begins at IE9. Desired CSS layout requires Flexbox and is further enhanced with Grid Layout.

🔡 i18n

Eureka is on Crowdin. Please contribute to our translations if you are able.

♿️ Accessibility Proclaimer

Eureka strives for WCAG Level AA success criteria in all scenarios with some accessibility preference features leaning towards Level AAA. Please log any a11y issues here.

✅ Getting Started

We're going to use yarn so make sure that is installed.

npm install yarn -g

To fire up a testing server run the following:

git clone -b release-2.0 git://github.com/jpdevries/eureka.git
cd eureka
yarn prestart
yarn build
yarn serve # start the  development server
# open http://localhost:3001 # Node server

To host the compiled production server run

yarn start # install, fetch sources, build

or

yarn prod # fire up the production server

The testing server hosts the sources and client/build directories along with a REST API to GET, POST, PUT, DELETE media items.

⚒ Development

The Eureka component is created with create-react-app and found in the client directory. There you can run React tests, build the React component, and start the development server.

Firstly, you'll need the testing server running for the REST API:

cd eureka
yarn server

Now, in another terminal tab:

cd client
yarn build
yarn test
yarn start
# open http://localhost:3000 # development server

The development server, like any other React app created with create-react-app, will automatically inject changes as you save changes to your source files.

🗄 REST API

Eureka is hungry for remote media sources. It needs a REST API to feed it JSON data.
Find docs at the REST API wiki page.

💄 Decorating Actions

Eureka's core Redux actions assume you'll be using a REST API. If REST isn't really your thing, or you need to modify the Redux actions for some other reason, you can decorate the actions Eureka will use. This is done using a Higher Order Component that wraps EurekaMediaBrowser and injects a decoratedActions property which will be applied as a shallow merge on top of the default actions. Reference this Gist example of decorating actions for an example.

📠 Server Side Rendering

Eureka is progressively enhanced with React to be asynchronous and a richer experience in capable browsers that successfully execute scripts. But Eureka's support doesn't end at modern browsers because its design process doesn't start there. Eureka is a semantic and synchronous HTML form before it is an enhanced Virtual DOM.

Reference the Server Side Rendering Wiki page for documentations and examples on achieving world wide support.

⌨️ Keyboard Shortcuts

Eureka uses JavaScript events to enrich the user experience of keyboard users.

Shortcut Command
Toggle Sidebar ctrl+;
Change View ctrl+alt+(1-5)
Change Media Source alt+(1-9)
Delete Item backspace
Expand Item spacebar
Choose Item return
Create Directory ctrl+n
Create file ctrl+shift+n
Upload Files ctrl+u
Rename Item ctrl+r
Filter Items ctrl+f
Sort Ascending alt+up
Sort Descending alt+down
Sort by filename alt+n
Sort by dimensions alt+d
Sort by file size alt+f
Sort by edited on alt+e
Set Choose Mode to Single alt+s
Set Choose Mode to Multiple alt+m
Invert Selection alt+i

🎨 Theming

Request additional theming options and share your themes by opening an issue or joining the discussion on Gitter.

Variable Description
--active Color used to highlight activated components such as the drop area
--border-width Generic border width for panels, components, inputs
--border-style Generic border style for panels, components, inputs
--border-color Generic border color for panels, components, inputs
--button-bg Background color of button elements
--button-color Color of button text
--color Default text color
--dangerous Color to use for warnings and errors
--light-bg Generic light background color, used for panels
--link-color Default anchor text color
--panel-border-color Border color of panel components
--subtle Subtle color, used for Media Source Panel
--very-subtle Very subtle color, used for drop zone area
--very-subtle-icon-opacity Opacity for very subtle icons

📣 Audible Interface

Eureka uses a combination of ARIA attributes and .visually-hidden text to offer an experience that is as accessible visually as it is audibly.

The Eureka Browser interface without as seen by a screen reader includes  descriptive text for an accessible experience

There is one Achilles heel here. Depending on your media source API, you might not be able to provide alternative text for images and media items. In the event that no alt text is provided, Eureka will to the best it can. For example:

schildpad.jpg displays at 336x125, weighs 37 KB, and was edited on Sunday, April 02, 2017, Central European Summer Time

📺 Fullscreen Mode

To maximize usability Eureka leverages the Fullscreen API.

See the Fullscreen Mode in action

🏞 Masonry Layout

Eureka is enhanced by a Masonry Layout mode.

Masonry Layout Mode

If you are using Eureka as a UMD Module (probably not) you'll need to load Masonry first. If you would not like Masonry to be included in your bundle, add Masonry to your Webpack excludes. Eureka will only enable the Masonry Layout if Masonry is available.

externals: {
  "react": "React",
  "react-dom":"ReactDOM",
  "redux":"Redux",
  "react-redux":"ReactRedux",
  "react-masonry-component":"Masonry"
}

👀 Accessible Themes

Eureka is empowered by themes which make it more accessible to users with particular physical or contextual disabilities or preferences.

Black on White

White on Black

eureka's People

Contributors

jpdevries avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar

eureka's Issues

a11y testing

One of the primary goals of eureka.js is to be able to handle any accessibility test we could throw at it including disabling javascript all together.

Accessibility is tricky and so is testing it. Could use all the help we could get.

The static examples are hosted at:
http://devries.jp/static/eureka/examples/index.php (drawn html first)
http://devries.jp/static/eureka/examples/muck.php (drawn with js)

but I haven't hooked my server up to auto deploy on git push yet they may get out of date. For those with local php testing environments please pull from the develop branch and test the examples folder. Otherwise, use the links above.

Screencast
A 90 second screencast of our first screen reader test
https://vimeo.com/128895951

Please log any accessibility issues or concerns
https://github.com/jpdevries/eureka/issues/new

Too many (duplicate/preload) AJAX requests on render

It looks like Eureka is firing off all of these requests when rendering the browser:

  • List media sources
  • List files in s=2 (nothing is selected, but I'm guessing it grabs the first media source here) for dir=undefined => should be set to / instead of undefined, otherwise that's good
  • List directories in s=undefined (this one's weird)
  • List directories in s=2 (first media source - this is good)
  • List directories in s=3 (this one's weird, I don't think it should try to preload for non-selected media sources on render)
  • List directories in s=1 (another one that I don't think is needed)
  • List files in s=2 and dir=undefined again

It seems to me that it should be possible to bring that back to just this:

  • List media sources
  • List directories in s=2 where 2 is the first media source in the list
  • List files in s=2 and dir=/

Opera Support?

Currently the flexbox styling is totally borked in Opera, but I think that is because flexbox is borked in Opera.

Plugins?

There are some features I'd like to add without necessarily having to add them to the core. For example, the 'context menus' that display Expand | Choose | Rename | Delete options aren't currently customizable. Certain options can be hidden, but you can't say add a custom Crop button or something like that.

To make Eureka.js more flexible, I'd like to somehow make the core more extendable (maybe the fact that it already is OOP with ES6 classes will help out here)

Show Empty Message

When you browse to a directory that is empty the stage area is very well, empty

Would be nice to be all Slack about it and show a clever message with a call to action to browse elsewhere, search, create a new folder, upload a file, or whatever else.

Consider: Option to show caret arrows in tree browser?

This issue proposes an option, which defaults to false, to display "caret" arrows to depict whether or not a directory is expanded or collapsed.

Note: Eureka should always expand directories when they are selected for browsing.

Eureka

  • click a folder name to browse that directory
  • click the folder icon to toggle visibility of sub children

MODX Native Browser

  • click a folder name to browse that directory
  • click the folder or caret icon to toggle visibility of sub children

So Eureka works just like the MODX Native browser with the exception that:

  • eureka's folder icons visually depict whether or not a directory is expanded or collapsed
  • bolded directory titles are used to show the directory currently being browsed
  • eureka does not display "caret" arrows to depict whether or not a directory is expanded or collapsed

Draft API

To date, eureka.js is rather read-only meaning that you fire it up, give it some settings and URLs for XHR requests, listen to some events...and that's it.

The internals haven't been exposed and references to the _model remain private. Need to determine what methods would be desirably in a first draft of a public API and then either add hooks for those through the Eureka class or simply make the _model a public model:EurekaModel so it can be accessed like:

$eureka.model.getCurrentMediaSource()

or to get real crazy with it:

$eureka.model.setCurrentDirectory('assets/uploads')

i18n support

The API has an option to set the language, but it doesn't affect anything yet.

Better Handle Broken/Timeout Connectors?

In our tests with Amazon S3 and MODX we've noticed that the list directories connector can time out. I'm not sure how, but perhaps the front end should be better prepared for this

Optimize CSS

40kb is a bit bigger than what I was shooting for with un-minified CSS size. Contributing factors to size are:

  • overly specific CSS selectors
  • flexbox (and other) prefixes
  • long hand flexbox declarations

The overly specific CSS selectors (> is used a lot) are bad I know, but I loose sleep over flex properties being applied too loosely so I like to enforce the parent / child relationship. Even still, the selectors could probably be safely loosened.

For the overrides, once Bourbon ditches their flexbox prefixes I'm planning on removing all prefixes from the Sass and using grunt-autoprefixer to add them in the build process.

For the long handed flex declarations, I'm weary to remove those because some of they help avoid certain cross browsers bugs and I also feel they improve legibility. The spec disagrees with me on this, and recommends using the shorthand syntax.

Hack Firefox?

Firefox still has some flexbox issues, particularly when dealing with flex-direction:column. We are noticing that Firefox will allow children to be as tall as they want, rather than as tall as the flexbox spec tells them they should be. To work around this, I've had to 'hack firefox' to essentially not use the holy grail layout OR manually patch the flexbox bug using JavaScript and a nasty resize listener.

Somebody please tell us we are mistaken and just missing a Firefox prefix or something 🙏

Example

See this page in Firefox 37.0.2 to see how we are working around the flexbox bug by de-activating the holy grail layout.

See this page in Firefox 37.0.2 to see how we are working around the flexbox bug by using JavaScript rather than the above CSS hack.

Sass Hack

html.no-touch {
    .eureka-wrapper.hack-firefox {
        @include media($gtMobile) {
            > .eureka {
                @include firefox-hack() { // #janky
                    @include flex-basis(86%);
                    max-height:86%;
                }
                > .stage {
                    > .eureka-table {
                        @include firefox-hack() {
                            height:auto;
                            @include flex-basis(86%);
                            max-height:86%;
                        }
                    }
                }
            }
            > .proceed {
                @include firefox-hack() {
                    @include flex-grow(1);
                }
            }
        }
    }
}

JavaScript Hack

<script>
/*
  hopefully we are mistaken but we believe we found a use case where firefox 38 deviates from the flexbox spec
  find the patch we came up with below
*/
Modernizr.addTest('firefox', function () {
    return !!navigator.userAgent.match(/firefox/i); // who cut the user agent? shame on us...
});
(function(){
    /*
      checking the userAgent is really gross...
      so let us not and say we did...
    */
    if(!Modernizr.touch && Modernizr.firefox) { // for firefox non-touch browsers
        document.addEventListener('DOMContentLoaded', function(){ // layout the flex children the way firefox should
            /* fix the bug somehow???... */
        });
    }
})();
(function(){ 
    /*
      this is probably a more reliable way than checking the userAgent...
    */
    if(!Modernizr.touch) {
        document.addEventListener('DOMContentLoaded',function(){
            var mediaBrowser = document.getElementById('media-browser_0'); // dangerous but more optimal to not looks these up each resize
            var eurekaWrapper = mediaBrowser.parentNode;
            var eurekaTable = mediaBrowser.querySelector('.eureka-table');

            document.querySelector('.hack-firefox.eureka-wrapper').classList.remove('hack-firefox'); // remove the CSS patch :/

            if(eurekaTable.offsetHeight > eurekaWrapper.offsetHeight) { // eurekaTable might be too tall now
                try {
                    console.log('uh oh, we detect a flexbox bug');
                } catch(e) {}

                function handleResize() {       
                    // i hope i don't get in trouble for doing other browsers homework...
                    var w = Math.max(document.documentElement.clientWidth, window.innerWidth || 0);
                    var dh = (eurekaWrapper.offsetHeight - eurekaWrapper.querySelector('.eureka__topbar').offsetHeight - eurekaWrapper.querySelector('footer.proceed').offsetHeight);
                    dh -= (16*1.5); //1.5ems of margin

                    eurekaTable.style.height = eurekaTable.style.maxHeight = eurekaTable.style.flexBasis  = (w <= 768) ? null : dh + 'px'; 
                }

                window.addEventListener('resize',handleResize, false); // we'll be here all night folks...
                handleResize();
            }

        });
    }
})();
</script>

Chrome 👍


No hacks needed. Correctly laid out.

Firefox 37.0.2 👎


SCSS Hack being used to deactivate holygrail layout.

Firefox 37.0.2 👎


JS Hack being used to manually calculate holygrail layout. This is super lame because the whole point of flexbox is not to have to do things like this 😢

Flexbox Bug

The issue is rather simple. We have div.stage:

with this CSS:

.stage {
  display: flex;
  width: 100%;
  box-orient: vertical;
  flex-direction: column;
  box-lines: single;
  flex-wrap: nowrap;
  flex-grow: 1;
  flex-shrink: 1;
  flex-basis: 100%;
  -ms-flex-preferred-size: 100%;
}

So it is nice and tall and will lay it's children, div.eureka__topbar and div.eureka-table out vertically. We want .eureka__topbar to take up as much room as it needs to but not grow anymore than is necessary, and then we want .eureka-table to simply take up the remaining space.

We have div.eureka__topbar:

with this CSS:

  flex-basis:4.8rem; /* if we had to pick a certain size */
  flex-shrink:1; /* ok to shrink beyond the basis */
  flex-grow:0; /* do not grow */

Lastly, we have div.eureka-table:

with this CSS:

.eureka-table {
  flex-grow: 1; /* grow */
  flex-basis: 100%; /* be greedy */
  height: auto; 
  -ms-flex-preferred-size: auto;
}

so it will take up the remaining space.

Firefox Flexbox Bug :(

So here's the deal, Eureka's layout uses flex-direction:column to layout flexible components vertically. This allows us to set a desired height using flex-basis on the "top bar" area that contains the search and layout buttons. In the same way, we can set a desired height for the footer.proceed component that contains the cancel and choose buttons. Then, the magic of flexbox will allow our "stage area" that contains the grid of media items to grow to be as tall as it can be given those conditions. Awesome!

Problem is, Firefox 37.0.1 still seems to have some critical flexbox bugs. I believe it deviates from the spec when it allows the stage area to grow to be as tall as needed (completely breaking our flexible layout).

Cross Browser Test Flex Box Tweaks

So I went on a cruise for a week 🚢

and with a few browser updates the flexbox layout broke itself 👎

Making sure to really test everything cross browser before committing these tweaks.

Firefox Mac

Chrome Mac

Safari 9.0 Mac

DRY out the JS

The source scripts use an OOP MVC structure and are authored in TypeScript but they still aren't as DRY (Do not Repeat Yourself) as they could be. By DRYing things out, we should shave off some filesize but more importantly make the codebase more maintainable and testable.

FR: Paste to Upload

This would be a great feature, but it sounds like browser support isn't stable yet

Remove XHR Assumptions?

Currently when you say, delete an image

  • eureka.js removes the image immediately from the view
  • updates the model
  • model dispatches appropriate event and data

idea being you listen for the event and say, make another XHR request to your API endpoint to actually delete the image from the backend.

This is just one example of where eureka.js assumes something will successfully happen. Prior to tagging a 0.1.0, I'd like to put some more thought and possibly refactoring into this.

Additional Media Types

Currently Eureka really only supports <img>. Would like to add:

  • audio formats
    • mp3
  • video formats
    • mp4, ogv, webm
  • generic formats (thumbs for)
    • pdf, excel, word, zip, powerpoint, txt
  • code formats (maybe)
    • html, css, js, php, markdown

Keyboard Shortcuts?

As part of our accessibility testing I want to make sure things are focusable through tabbing and what not, but Eureka should also support keyboard shortcuts. Question is...which ones should it support and what key patterns should they use? Discuss here

Show Upload Status on All Viewports

Currently the only visual progress indicator is in the dropzone, which is only visible to .no-touch users with large enough windows. Not sure the best way to handle it, maybe just a really thin stripe at the top.

ES 5 Support

eureka.js was written in modern VanillaJS and uses some new ES6 stuff. To support older browser, something like typescript will need to be used to transpile the source code for older browsers.

Critical Layout Issue

Here I had been thinking this flexbox layout was perfect and it only seems to work correctly in Safari. Likely has something to do with overflow, cross browser issues with <tbody>, or something like not setting height as well as flex basis.

FR: List View

Also I would like to NOT see thumbnails in the media browser. There
should be a view that just shows file names.

modmore/Redactor#400

Pull XHR Requests out?

So currently eureka.js makes all the XHR requests itself, which is kind of nice. In the next commit or so I expect to have at least the urls it hits for each type of request as settings but one thing I haven't been able to decide on is how to handle appending headers to the requests so that eureka.js can be used in secure systems like the MODX Manager.

It seems like one option would be a way to pass in an array of additional headers to send which each request. Another would be to pull the XHRs out entirely and eureka.js just dispatches events, you make your requests, and set the new data manually to the model.

I'm not sure which one is more desirable and don't have much of a preferences

support thumb property

I think this may need a change to Eureka - currently the processor returns a src element which is inserted in to the page and the browser, but we'll likely need a second element supported for the src of the browser thumbnail so we can send a different url back for that. Calling it thumb should do the trick. I'll start adding it to the processor, can get it added to Eureka?

https://github.com/modmore/Redactor/issues/349

Show Root as Directory Option?

Currently Eureka doesn't display the media source itself as the root directory in the file tree.

Because of this, a up arrow is displayed next to the media source select that when clicked goes up a directory (cd ../). This allows users to reach the absolute root without needing to display that folder in the tree.

Maybe there should be an option to display the root directory in the file tree though...

Wrong Default Media Source on Init

Currently the JS assumes the JSON it will be fed will already be sorted ASC by id. Should sort on the JS level just to be safe I guess.

{"success":true,"total":"2","results":[{"id":4,"name":"Amazon S3"},{"id":1,"name":"Filesystem"}]}

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.