Giter Site home page Giter Site logo

semirara's People

Contributors

shokai avatar sota1235 avatar

Stargazers

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

Watchers

 avatar  avatar  avatar  avatar  avatar

semirara's Issues

page rename

ツールバーからmodalを出して新しい名前を入力させる
#7 を実装してからの方がいい

ログインした人だけ編集できる

非ログイン状態でアクセスした場合は編集できない

  • 編集UIを表示しない
  • getpagegetpagelist以外のコマンドをサーバー側で無視する

memjs memory leak

(node) warning: possible EventEmitter memory leak detected. 11 timeout listeners added. Use emitter.setMaxListeners() to increase limit.
Trace
    at Socket.addListener (events.js:252:17)
    at Socket.Readable.on (_stream_readable.js:673:33)
    at Socket.once (events.js:278:8)
    at Socket.setTimeout (net.js:315:12)
    at /Users/sho/src/nodejs/semirara/node_modules/memjs/lib/memjs/server.js:156:7
    at [object Object].Server.sock (/Users/sho/src/nodejs/semirara/node_modules/memjs/lib/memjs/server.js:148:5)
    at [object Object].Server.write (/Users/sho/src/nodejs/semirara/node_modules/memjs/lib/memjs/server.js:154:8)
    at [object Object].Client.perform (/Users/sho/src/nodejs/semirara/node_modules/memjs/lib/memjs/memjs.js:519:8)
    at [object Object].Client.get (/Users/sho/src/nodejs/semirara/node_modules/memjs/lib/memjs/memjs.js:114:8)
    at cache.es6:34:14
    at new Promise (/Users/sho/src/nodejs/semirara/node_modules/babel-polyfill/node_modules/core-js/modules/es6.promise.js:193:7)
    at Cache.get (cache.es6:31:12)
    at Function._callee$ (page.es6:73:26)
    at tryCatch (/Users/sho/src/nodejs/semirara/node_modules/babel-regenerator-runtime/runtime.js:61:40)
    at GeneratorFunctionPrototype.invoke [as _invoke] (/Users/sho/src/nodejs/semirara/node_modules/babel-regenerator-runtime/runtime.js:329:22)
    at GeneratorFunctionPrototype.prototype.(anonymous function) [as next] (/Users/sho/src/nodejs/semirara/node_modules/babel-regenerator-runtime/runtime.js:94:21)

validate page name

invalid charcters

  • # \r \n
  • / in wikiname
  • url encoded chars
  • space on head/tail

valid

  • ?
  • a-zA-Z0-9_

reserved words

  • auth
  • login
  • logout
  • api
  • config

pagelist

  • 現在表示しているページをlist内でハイライト
  • 更新日時順で表示する

restore caret position

カーソル位置を復元したい

inputのselectionStartselectionEndを随時記録し、inputにfocusする時に復元する

throttle page saving

  • client side
    • editorの編集が止まった時に"page:lines"をdispatchする
  • server side
    • clientからの送信が落ち着いたらPage#save()する

clientのコードが重くなってる

960kbあるのはおかしい

highlight.jsを入れた頃から急に増えてるような?
でもhighlight.jsにはdependenciesが無いし、サーバーサイドレンダリング #41 のあたりからかもしれない

multi login

store session on memcached (key=session, value=github.id)

ambiguous find

大文字でも小文字でも同じpageが表示されるようにする

/general/testでも/General/TESTでも同じページを表示する
mongooseで検索する時のqueryで/regex/iを使えば良い

pagelistには大文字小文字をきちんと区別して表示する

setTimeoutsettimeoutと表示されるのはおかしい

実装

  • 保存と表示は大文字小文字区別する
  • 読み出し時だけ、大文字小文字無視する

page:lines受信後にeditline位置調整

同じページを開いている別clientが編集した時に、editlineをずらす必要がある

実装案1: 行にIDつけてeditline移動を検知

  • 行にIDを付けておく
    • client側にて、insertNewLineupdateLineした時に付ける
    • IDは画面に表示する必要はない
  • 当然それは同じページを開いている相手にも保存される
  • 行データ受信時に、行のIDを見てeditlineを修正する
    • socket.ioから受信した後のpage:lines actionをdispatchした前後を見るmiddlewareを実装すればいい
  • 行のIDはmongodbに保存される必要は無いので、pre-saveで削除する

UUIDを使う?

ここまで大きなIDでなくてもいいと思う

gyazz記法を実装する

syntax

external link

  • [[http://example.com]]
  • <a href="http://example.com">http://example.com</a>

external link with title

  • [[http://example.com cool page]]
  • <a href="http://example.com">cool page</a>

inner link

  • [[PageName]]
  • <a href="AppRoot/Wiki/PageName">PageName</a>

wiki link

  • [[WikiName::PageName]]
  • <a href="AppRoot/WikiName/PageName">WikiName::PageName</a>

Image

  • [[http://example.com/image]]
  • <img src="http://example.com/image" />
  • check content type

Icon

  • [[PageName.icon]]
  • <img src="icon url" />

code

[[:javascript:]]
  console.log("hello");

monolithicするためにディレクトリ構成を変える

問題

  • サーバーでのproduction実行のために、server/client共有するコードもbabelでトランスパイルしなければならない。
  • clientのコードもbabel通した方が文法エラーが見やすいのでやりたい

現状

server/ディレクトリのみをトランスパイルしている。なので両方で使うライブラリはclientからは../../server/lib/foo.es6と参照している

- server/
  - src/
  - dist/
- client/

変更

全部コンパイルする

-src/
  - server/
  - client/
  - share/
-dist/
  - server/
  - client/
  - share/

editorから編集内容をdispatchする

現在はeditorから新しいpage.lines全体をstateに書き込んでいる

変更

  • 現在の行を◯◯に書き換えた
  • 現在の行に新規行を挿入した

などの編集内容をdispatchする

cookieなしログインなしでアクセスするとsocket.io接続できない

  semirara:socket:middleware set socket.user +239ms
TypeError: argument str must be a string
    at Object.parse (/Users/sho/src/nodejs/semirara/node_modules/cookie/index.js:49:11)
    at Array._callee$ (middleware.es6:10:28)
    at tryCatch (/Users/sho/src/nodejs/semirara/node_modules/babel-regenerator-runtime/runtime.js:61:40)
    at GeneratorFunctionPrototype.invoke [as _invoke] (/Users/sho/src/nodejs/semirara/node_modules/babel-regenerator-runtime/runtime.js:329:22)
    at GeneratorFunctionPrototype.prototype.(anonymous function) [as next] (/Users/sho/src/nodejs/semirara/node_modules/babel-regenerator-runtime/runtime.js:94:21)
    at step (middleware.es6:4:1)
    at middleware.es6:4:1
    at new Promise (/Users/sho/src/nodejs/semirara/node_modules/babel-polyfill/node_modules/core-js/modules/es6.promise.js:193:7)
    at Array.<anonymous> (middleware.es6:4:1)
    at Array.setUserContext (middleware.es6:7:23)
    at run (/Users/sho/src/nodejs/semirara/node_modules/socket.io/lib/namespace.js:116:11)
    at Namespace.run (/Users/sho/src/nodejs/semirara/node_modules/socket.io/lib/namespace.js:128:3)
    at Namespace.add (/Users/sho/src/nodejs/semirara/node_modules/socket.io/lib/namespace.js:157:8)
    at Client.connect (/Users/sho/src/nodejs/semirara/node_modules/socket.io/lib/client.js:75:20)
    at Server.onconnection (/Users/sho/src/nodejs/semirara/node_modules/socket.io/lib/index.js:317:10)
    at emitOne (events.js:90:13)
    at Server.emit (events.js:182:7)

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.