Java Script

CSS, JQuery 를 이용한 웹 어플리케이션 적용

다크엔지니어 2021. 2. 24. 22:23
반응형

2020.11.29 - [Embedded] - 시스템 모니터링 인터페이스 개발

이전에 Node JS 기반인 Node Red 를 통해 Raspberry Pi 보드에 키오스크 모드를 적용한 웹어플리케이션을 개발했었다.

Node Red 는 JavaScript 기반으로 함수 등을 만들 수 있으며, 여러 기능들이 모듈화 되어있다. 하지만 한계는 존재하고

추가 적인 기능을 위해 CSS 나 JQuery, Angular JS 를 통해 개발을 할 수도 있다.

 

이번에는 더욱더 섬세하며 추가적인 기능을 위해 CSS, JQuery 를 통해 개발을 진행해 보았다.

Node Red 에서 제공하는 기능으로 접근 불가능한 영역에 대하여 개발을 진행했으며.

HTML 에 접근하기 위한 CSS 를 만들어야 하며, JavaScript 의 Value 를 전달하기 위해 JQuery 를 이용한다.

또한 CSS 를 통해 Node Red Class, id 등에 접근하여 get set 을 진행한다.

 

아래는 CSS 와 JQuery 를 이용한 JavaScript 이다.

실제 개발 환경에는 한곳에 있지만 식별을 위해 따로 나누어 올려보았다.

<style>
#Production_Count_cards  {
    xborder: solid 3px red ;
    height: 825px !important;
}
#Movement_IO_cards  {
    xborder: solid 3px red ;
    height: 868px !important;
}
#Movement_Speed_cards  {
    xborder: solid 3px red ;
    height: 336px !important;
}

#Movement_IO .nr-dashboard-cardtitle.ng-binding.ng-scope {
    font-size: 0px;
}
#Movement_IO .nr-dashboard-cardtitle.ng-binding.ng-scope:before {
    content: attr(data-content);
    font-size: 23px;
    display: block;
}
</style>
<script>
(
    function($scope) 
    {
        $scope.$watch('msg.payload', function() 
        {
            if ($scope.msg.payload)
            {
                $("#Movement_IO .nr-dashboard-cardtitle.ng-binding.ng-scope").attr('data-content',$scope.msg.payload);
                
                /*1.
                $("#Movement_IO .nr-dashboard-cardtitle.ng-binding.ng-scope").css("font-size", "0px");
                2.
                content: attr(data-content) '';
                $('#Movement_IO .nr-dashboard-cardtitle.ng-binding.ng-scope').hover(function()
                {
                    $(this).attr('data-content',$scope.msg.payload);
                });
                3.
                content: attr(data-content) '';
                $('#Movement_IO .nr-dashboard-cardtitle.ng-binding.ng-scope').on('click', function () 
                {
                   $(this).attr('data-content','bar');
                });
                4.
                content:var(--content,"I am a before element");            
                <div class="Movement_IO nr-dashboard-cardtitle ng-binding ng-scope"></div>
                <div class="Movement_IO nr-dashboard-cardtitle ng-binding ng-scope" style="--content:'I am a blue element'"></div>
                5.
                content:var(--content,"I am a before element");
                document.querySelectorAll('#Movement_IO .nr-dashboard-cardtitle.ng-binding.ng-scope')[0].style.setProperty("--content", "'$scope.msg.payload'");*/
            }
        });
    }
)(scope);
</script>

Node Red 환경에서 지정한 id 와 class 에 접근 가능하며, id 와 class 동시에 중복으로 사용도 가능하다 우선순위는 id

가 더 높다. 이러한 방식으로 각 property 들을 control 할 수 있으며, JQuery 를 사용하여 ,script 에서도 접근이 가능하

다.

script 에서 접근이 가능하다는 것은 Node Red msg.payload 값을 이용하여 HTML 에 접근이 가능하다는 것이다.

결국 Node Red 개발 환경에서 접근 하지 못하는 곳도 마음대로 개발 할 수 있다. 즉, UI 도 화려하게 꾸밀 수 있다.

아래는 Node Red class property 값을 이용하여 보기좋게 꾸며놓은 CSS 이다.

<style>
root, a, button, p, div {
    -webkit-user-select: none !important;
}

body {
    background: -webkit-linear-gradient(
    55deg,
    #631111 10%,
    #2d5569 50%
    );
    -webkit-touch-callout: none !important;
}

    
body.nr-dashboard-theme md-toolbar,
body.nr-dashboard-theme md-content md-card {
    background-color: transparent !important;
    color: #FFFFFF;
}

ui-card-panel {
    background-color: rgba(0,0,0,0.1) !important;
    border-radius: 10px !important;
}
    
#Homey_Dashboard_Navigation {
    background-color: transparent !important;
    border-radius: 10px !important;
}

.md-card.md-default-theme, md-card {
    border-radius: 10px;
}

.nr-dashboard-switch.ng-scope {
    background-color: rgba(255,255,255,.2) !important;
}

.nr-dashboard-switch.ng-scope:hover {
    background-color: rgba(255,255,255,.5) !important;
}

.nr-dashboard-theme .nr-dashboard-button .md-button {
    background-color: rgba(255,255,255,.2);
}

.md-button {
    border-radius: 10px;
}

.nr-dashboard-cardpanel layout-column {
    background-color: rgba(255,255,255,0.9) !important;
    background-color: transparent !important;
    border-radius: 10px !important;
}

.nr-dashboard-theme ui-card-panel {
    border: none;
}

.nr-dashboard-template {
    overflow-y: visible;
}
.nr-dashboard-theme md-content md-card {
    background-color: transparent !important;
}

.nr-dashboard-theme ui-card-panel p.nr-dashboard-cardtitle {
    color: rgba(255, 255, 255, 0.9);
}
</style>

<script>
document.ontouchmove = function (e) {
    e.preventDefault();
}
</script>

이러한 방식들을 통해 유저에게 오픈 파일을 제공하여 유저가 원하는 값을 입력하면 섬세한 부분까지 적용가능하게 만

들면 더욱더 가치 있을것으로 여겨진다.

(참고로 본인은 유저가 쓴 ini file parsing 을 통해 최종 HTML 데이터를 변경 가능하게 만들어 놓았다.)

반응형