Old question, but found myself asking the same thing. How to intercept res render? Using express 4.0x something now.

You can use/write middleware. The concept was a bit daunting to me at first, but after some reading it made a little more sense. And just for some context for anyone else reading this, the motivation for overriding res.render was to provide global view variables. I want session to be available in all my templates without me having to type it in every res object.

The basic middleware format is.

 

app.use( function( req, res, next ) {
    //....
    next();
} );

The next param and function call are crucial to execution. next is the callback function, to allow multiple middleware to do their thing without blocking. For a better explanation read here

This can then be used to override render logic

 

app.use( function( req, res, next ) {
    // grab reference of render
    var _render = res.render;
    // override logic
    res.render = function( view, options, fn ) {
        // do some custom logic
        _.extend( options, {session: true} );
        // continue with original render
        _render.call( this, view, options, fn );
    }
    next();
} );

카테고리CSS 값예제설명일반링크와 상태선택드래그 앤 드롭크기 조절과 스크롤확대와 축소

auto 사용자 에이전트가 현재 맥락에 맞춰 표시할 커서를 결정. 예를 들어 글씨 위에서는 text를 사용합니다.
default   플랫폼에 따라 다른 기본 커서. 보통 화살표입니다.
none 커서 없음.
context-menu   콘텍스트 메뉴 사용 가능.
help   도움말 사용 가능.
pointer   링크를 나타내는 포인터. 보통 한 쪽을 가리키는 손입니다.
progress   프로그램이 백그라운드에서 작업 중이지만, 사용자가 인터페이스와 상호작용할 수 있음. (wait과 반대)
wait   프로그램이 작업 중이고, 사용자가 인터페이스와 상호작용할 수 없음. (progress와 반대) 간혹 모래시계나 시계모양 그림을 사용합니다.
cell   표의 칸이나 여러 칸을 선택할 수 있음.
crosshair   십자 커서. 종종 비트맵 선택에 사용합니다.
text   글씨 선택 가능. 보통 I빔 모양입니다.
vertical-text   세로쓰기 글씨 선택 가능. 보통 옆으로 누운 I빔 모양입니다.
alias   별칭이나 바로가기를 만드는 중.
copy   복사하는 중.
move   움직이는 중.
no-drop   현재 위치에 놓을 수 없음.
bug 275173: Windows와 Mac OS X에서 no-drop은 not-allowed와 같습니다.
not-allowed   요청한 행동을 수행할 수 없음.
grab   잡을 수 있음. (잡아서 이동)
grabbing   잡고 있음. (잡아서 이동)
all-scroll   모든 방향으로 이동 가능. (패닝)
bug 275174: Windows에서 all-scroll은 move와 같습니다.
col-resize   항목/행의 크기를 좌우로 조절할 수 있음. 종종 좌우 화살표의 가운데를 세로로 분리한 모양을 사용합니다.
row-resize   항목/열의 크기를 상하로 조절할 수 있음. 종종 상하 화살표의 가운데를 가로로 분리한 모양을 사용합니다.
n-resize   움직일 수 있는 모서리. 예를 들어, se-resize 커서는 움직임이 사각형의 동남쪽에서 시작할 때 사용합니다. 어떤 환경에선 동일한 방향의 양방향 화살표를 대신 보여줍니다. 즉 n-resize와 s-resize는 ns-resize와 같습니다.
e-resize  
s-resize  
w-resize  
ne-resize  
nw-resize  
se-resize  
sw-resize  
ew-resize   양방향 크기 조절 커서.
ns-resize  
nesw-resize  
nwse-resize  
zoom-in  

확대/축소할 수 있음.

zoom-out  
const isJson = (str: string) => {
  try {
    const json = JSON.parse(str);
    return json && typeof json === 'object';
  } catch (e) {
    return false;
  }
};

Copy & Paste 시에 텍스트만 가져오도록 처리 onpaste 이벤트에 걸면된다.

const getTextByPasteClipboard = (e) => {
  e.preventDefault();
  let text;
  const clp = (e.originalEvent || e).clipboardData;
  if (clp === undefined || clp === null) {
    // eslint-disable-next-line @typescript-eslint/ban-ts-ignore
    // @ts-ignore
    text = window.clipboardData.getData('text') || '';
    if (text !== '') {
      text = text.replace(/<[^>]*>/g, '');
      if (window.getSelection) {
        const newNode = document.createElement('span');
        newNode.innerHTML = text;
        window.getSelection().getRangeAt(0).insertNode(newNode);
      } else {
        // eslint-disable-next-line @typescript-eslint/ban-ts-ignore
        // @ts-ignore
        document.selection.createRange().pasteHTML(text);
      }
    }
  } else {
    text = clp.getData('text/plain') || '';
    if (text) {
      text = text.replace(/<[^>]*>/g, '');
      document.execCommand('insertText', false, text);
    }
  }
};
const getImageSize = (file: File, callback: (width: number, height: number) => void) => {
  const reader = new FileReader();
  reader.readAsDataURL(file);
  reader.onload = (e) => {
    const image = new Image();
    image.src = e.target.result as string;
    image.onload = function () {
      // eslint-disable-next-line @typescript-eslint/ban-ts-ignore
      // @ts-ignore
      callback(this.width, this.height);
    };
  };
}

 

div에 overflow를 사용해 scroll 를 만들었을때, ios 등에서 smooth scroll이 안될 경우.

 

* {
    -webkit-overflow-scrolling: touch;
}

위 코드 삽입. * 로 설정은 부담이 될 수 있으므로 해당 태그에만 적용시켜도 된다.

프로젝트에서 상단 하단 position:fixed된 레이아웃 상태에서

아이폰X 웹뷰 대응 방법이다.

  1. 메타태그 뷰포트쪽에 viewport-fit=cover 를 추가
  2. padding-top: env(safe-area-inset-bottom);

2번의 속성값을 응용하는 건데 기본적으로


env(safe-area-inset-bottom); // IOS 11.0 이상 (신)
constant(safe-area-inset-bottom); // IOS 11.0 버전 (구)
ios 11.2 업데이트에서 constant가 제거됨 env를 사용.

해당 값이 필요한 부분에 위값을 응용하여 집어 넣었다. (저는 커스텀한곳에 위 env,constant 둘다 삽입 했습니다;)

safe-area-inset의 기본값이 있어 값을 수정하고 싶으면

padding-bottom: calc(env(safe-area-inset-bottom) - 5px);

css의 calc를 사용하여 원하는 곳에 속성을 추가한후 값을 조절해서 사용하면 되겠다.

예제 )

  1. 하단에 고정 버튼이 있다고 할때.

수정 전

수정 후

2. 위의 수정 후사진처럼 변경을 하려면

// 기본 CSS
.button-fixed-bottom {
position: fixed;
right: 0;
bottom: 0;
left: 0;
background: #fff;
}
// 변경값을 줄 클래스
.button-fixed-bottom {
padding: 12px 16px; // 기본 값을 지정해 준후
padding: 12px 16px calc(constant(safe-area-inset-bottom) + 12px) 16px; // 변경이 필요한 부분은 하단의 패딩값이기 때문에 constant로 구버전 값을 넣고
padding: 12px 16px calc(env(safe-area-inset-bottom) + 12px) 16px;
} // env로 신규버전 값을 넣어준다.

3. constant / env 값을 둘다 추가해야 IOS 구버전, 신버전 대응이 가능하다

참고 : 링크

I just played with this CodePen and it seems that if you set the background-color to transparent for all three properties below (and in this example also remove box-shadows), the scrollbar is not visible at all:

 

#style-1::-webkit-scrollbar-track {
  //    -webkit-box-shadow: inset 0 0 6px rgba(0,0,0,.1);
  background-color: transparent;
}

#style-1::-webkit-scrollbar {
  background-color: transparent;
}

#style-1::-webkit-scrollbar-thumb {
  //    -webkit-box-shadow: inset 0 0 6px rgba(0,0,0,.3);
  background-color: transparent;
}

 

This was tested in Chrome Desktop, Chrome for Android, and iOS Safari (v8.4) on an iPhone 6+.

I would however recommend for user experience (usability/accessibility) to keep the scrollbar visible though, as even I, knowing what I was doing, got a bit confused when there was no scrollbar.

+ Recent posts