Code Monkey home page Code Monkey logo

catberry's Issues

Add profiles support for templating

Add profiles support to be able to implement different templates for several types of devices (smartphones, tables, desktop and etc) by their screen sizes.

Request context storage

Implement something like context provider which can save some data per one request process. Main goal is to reuse data of one rendering process in another one.

Add universal http request implementation for modules

It is very useful to have http(s) request implementation for both client and server usage in modules. This new feature is called UHR (Universal HTTP request) and will be accessible for all modules via dependency injection and service locator.

Add assets building on catberry startup

Add basic assets building using gulp.

Every module has templates and some resources which need to process (copy, replace URLs, minify etc) and publish.

Catberry must execute all required gulp tasks.

Improve error handling when rendering page

Now any error in module stops page rendering on server-side. This is bad, it should only show error in placeholder where was error but whole page should be loaded on client.

Error handling should be the same on client and server and work in 2 modes:
Debug - all errors are shown with details and stack
Release - no errors are shown only special __error template or nothing.

Advanced event routing

Now every event on page should change URL hash. It is very useful for links sharing when you need to restore the same page state by link but in some situations events are just client-side events and not need to share it via links.

In this case it is needed to handle link clicks as just events without hash changes if "a" tag has data-event attribute.

Add base module implementation

Need to have ModuleBase constructor and userland modules should inherit ModuleBase.

ModuleBase should have:

  • Auto render methods support (if placeholder name is such-wow-placeholder then render method renderSuchWowPlaceholder should be invoked)
  • Auto handle methods support (same for events)
  • Auto submit methods support (same for forms)

Replace SAX with own light-weight parser

SAX parser is too complicated and slow for Catberry. It has too much functionality which Catberry does not need.

It will be a huge performance improvement to replace it with own simple parser which just search for HTML tags with ID attribute and raise event when it has found it.

Also need to implement pause/resume functionality or make this parser a stream.

ParserDuplex works incorrect with HTML comments

When placeholder has HTML comments that end at the end of file it causes exception:

catberry/lib/server/streams/ParserDuplex.js:242
            var tag = String.concat(this._tagBuffer,
                             ^
TypeError: Object function String() { [native code] } has no method 'concat'
    at PlaceholderTransform.ParserDuplex._parseTokens (/Users/pragmadash/Projects/flamp/node_modules/catberry/lib/server/streams/ParserDuplex.js:242:21)
    at PlaceholderTransform.ParserDuplex._write (/Users/pragmadash/Projects/flamp/node_modules/catberry/lib/server/streams/ParserDuplex.js:107:7)
    at doWrite (_stream_writable.js:226:10)
    at writeOrBuffer (_stream_writable.js:216:5)
    at PlaceholderTransform.Writable.write (_stream_writable.js:183:11)
    at write (_stream_readable.js:583:24)
    at flow (_stream_readable.js:592:7)
    at _stream_readable.js:560:7
    at process._tickCallback (node.js:415:13)

Simplify CookiesManager

Now CookiesManager support read/write operations but can be used only for read access. Need to remove all unused functionality and improve usability.

Implement event routing

Every hashtag change on page should raise an event in related modules and when change to another raise "end" event.

Add URL translator for human understandable URLs

Because of catberry modules receive its state from URL query string need to implement some kind of translator with URL mapping.

For example:

/rubrics?page=1

map to

/index?index_tab=rubrics?index_page=1

Add support for head tag as placeholder

It is needed to filter content when render head element placeholder.
We can not update script and link tags because it causes javascript re-execution and style re-applying.

Add method for testing browser support

Add to catberry object such method that checks browser support for ECMAScript 5 and History API.

It will be used for "Please update your browser page"

Implement client-side placeholder rendering

One of key features of catberry will be isomorphic module implementation: one module will work at server-side and client-side.

Therefore need to implement client-side part of framework for placeholder rendering and module API support.

Bundle creation problems on windows

As @dentrifonov reported
When start catberry on Windows get something like this:

[2014-05-25 16:56:17.443] [ERROR] catberry - { [Error: module "........catberry_modulesmainindex.js" not found from "C:\\Users\\Denis\\Documents\\Projects\\sample\\webapp\\node_modules\\catberry\\lib\\client\\__bundle_entr
y.js"]
  filename: '........catberry_modulesmainindex.js',
  parent: 'C:\\Users\\Denis\\Documents\\Projects\\sample\\webapp\\node_modules\\catberry\\lib\\client\\__bundle_entry.js' }
Error: module "........catberry_modulesmainindex.js" not found from "C:\\Users\\Denis\\Documents\\Projects\\sample\\webapp\\node_modules\\catberry\\lib\\client\\__bundle_entry.js"
    at notFound (C:\Users\Denis\Documents\Projects\sample\webapp\node_modules\catberry\node_modules\browserify\index.js:811:15)
    at C:\Users\Denis\Documents\Projects\sample\webapp\node_modules\catberry\node_modules\browserify\index.js:761:23
    at C:\Users\Denis\Documents\Projects\sample\webapp\node_modules\catberry\node_modules\browserify\node_modules\browser-resolve\index.js:185:24
    at C:\Users\Denis\Documents\Projects\sample\webapp\node_modules\catberry\node_modules\browserify\node_modules\resolve\lib\async.js:44:14
    at process (C:\Users\Denis\Documents\Projects\sample\webapp\node_modules\catberry\node_modules\browserify\node_modules\resolve\lib\async.js:113:43)
    at C:\Users\Denis\Documents\Projects\sample\webapp\node_modules\catberry\node_modules\browserify\node_modules\resolve\lib\async.js:122:21
    at load (C:\Users\Denis\Documents\Projects\sample\webapp\node_modules\catberry\node_modules\browserify\node_modules\resolve\lib\async.js:54:43)
    at C:\Users\Denis\Documents\Projects\sample\webapp\node_modules\catberry\node_modules\browserify\node_modules\resolve\lib\async.js:60:22
    at C:\Users\Denis\Documents\Projects\sample\webapp\node_modules\catberry\node_modules\browserify\node_modules\resolve\lib\async.js:16:47
    at Object.oncomplete (fs.js:107:15)

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.