SQLSERVER 에는 다양한 시스템 테이블이 있으며, 이걸 활용하면 많은 노가다(?)성 일들을 줄일 수가 있다.

그중에 데이터베이스안에 있는 사용자 테이블의 데이터를 모두 삭제할 때 해당 쿼리를 얻는 방법이다.


SELECT * FROM SYS.SYSOBJECTS

-- 해당 쿼리를 실행해보면 다양한 오브젝트의 정보를 얻을 수 있다.


그렇다면 DELETE 쿼리를 얻기 위해 아래와 같이 응용할 수가 있다.

SELECT 'DELETE FROM ' + [NAME] FROM SYS.SYSOBJECTS WHERE [xtype] = 'U' 

-- 해당 쿼리를 실행하면 결과는 DELETE 쿼리 목록이 조회 된다. 즉 노가다를 줄일 수 있다.!

-- U 는 사용자 테이블만 조회하기 위한 조건이다.


- xtype 의 종류

AF = 집계 함수(CLR)
C = CHECK 제약 조건
D = 기본값 또는 DEFAULT 제약 조건
F = FOREIGN KEY 제약 조건
L = 로그
FN = 스칼라 함수
FS = 어셈블리(CLR) 스칼라 함수
FT = 어셈블리(CLR) 테이블 반환 함수
IF = 인라인 테이블 함수
IT = 내부 테이블
P = 저장 프로시저
PC = 어셈블리(CLR) 저장 프로시저
PK = PRIMARY KEY 제약 조건(K 유형)
RF = 복제 필터 저장 프로시저
S = 시스템 테이블
SN = 동의어
SQ = 서비스 큐
TA = 어셈블리(CLR) DML 트리거
TF = 테이블 함수
TR = SQL DML 트리거
TT = 테이블 유형
U = 사용자 테이블
UQ = UNIQUE 제약 조건(K 유형)
V = 뷰
X = 확장 저장 프로시저


아래의 링크를 통해 좀더 sys.sysobjects 에 대해서 자세히 살펴볼 수 있다.

MSDN 의 sys.sysobjects 설명 링크

'IT > 데이터베이스' 카테고리의 다른 글

mssql recovery mode 확인 및 변경  (0) 2014.11.25


아침대용식으로 먹겠노라고 산 단백질바 (퀘스트바) 후기!!

인터넷에 찾아보니 이것저것있지만 젤 좋다고 해서 구매..

한박스에 12개 들어있고 가격은 다른 것들에비해 약간 비싼편..



우리는 만들어냈다는 자신감을 볼수 있는 ㅋㅋㅋ

재미있는 문구가 적혀있는 겉박스

꽤 높은 단백질(20g)을 함유하고 있다고 함



재료에 대한 자세한 안내와 만드는법도 상세히 적혀있는것이 신기했음

하지만 저런 모양은 절대 아니라는 점...



요건 초코브라우니 맛

찐덕찐덕한 질감이고 절대 저런모양아니고 

걍 갈색덩어리모양..

맛은 먹을만은 한정도



성분도 자세히 나와있음

슈가, 콜레스테롤, 지방이 아예 없진 않지만

그래도 극소량인듯!!



사고나서도 이걸 다먹을수 있을까 걱정되는

피넛버터맛....

단맛이 약하고 짠맛이 강하고 별로임...

재구매 의사 없음...



성분은 거의 비슷한듯!!



초콜렛칩 쿠키 도우 맛!!

초코브라우니랑 비슷한 맛인데 좀더 나은듯

제일 먹을만 함



요런요런 성분구성으로 되어있음

아침대용으로 먹을만 하다고 생각됨..



요런 캬라멜과 쿠키사이의 찐덕한 느낌에 걍 덩어리처럼 생겼음

바삭한느낌은 기대하면 안되지만 그래도 단백질 함량이 높은 것 치곤

먹을만 함 초코맛들이 그나마 나은듯 


우유랑 먹는것 강츄!!





선물받은 산토리 프리미엄 몰츠 크리미 서버!!

맥주 거품을 내주는 기계..

설명서는 일본어라 깜짝놀랬지만 매우 사용법은 간단함



위에 뚜껑부분(사진상에 왼쪽 바닥에 동그란 것이 뚜껑부분)만

따로 떼서 휴대용으로도 사용이 가능하구

저렇게 집에 두고 사용도 가능하며 AA 건전지가 들어감..

위에 손잡이를 뒤로 당기면 그냥 맥주가 나오고 앞으로 당기면 거품이 나옴!!



안쪽을 열어 맥주캔을 넣고 빨대를 꽂아 닫으면 끝이라 매우 간단하고

맥주대신 컵에 물을 넣고 내려주면 청소도 간편함



요건 휴대용으로 가지고 다닐때 윗부분과 함께사용하는

맥주캔을 잡아주는 홀더!



산토리 캔맥주가 집에 없어서 다른 캔맥으로 ...

머 상관은 없는듯~



사용하는 모습 거품나오는게 정말 멋짐!!

맥주와 거품은 7:3 일때가 가장 맛있는 황금비율이라고 함 ㅋㅋ






'일상' 카테고리의 다른 글

퀘스트바 (단백질바) 후기  (0) 2016.09.27
2015 사운드홀릭 EXIT (2015.05.30-31) 잠실보조경기장  (0) 2015.06.01
핸드폰 잃어버린 울엄마 ...  (0) 2015.05.19
개추움 ...  (0) 2015.01.08
전주여행 사진 모음 --- ☆  (0) 2014.12.11

/*

 * IMC 의 장비 가동상태바 를 도시하기 위한 플러그인

 * by MHD

 */


$.widget( "imc.barchart", {

// default options

options: {

margin : 20,

statusColor: {

auto : "#219244"

, idling : "#eb9934"

, setup : "#595858"

, change : "#00a0e9"

, alarm : "#ca1134"

, off : "#9e9e9f"

, defaultColor : "#FFFFFF"

},

oee : {

second : "second"

, startDateTime : "start_date"

, status : "status"

},

tickColor : "#AAAAAA",

tickWidth : 1,

dutyTime : "00:00",

hourTxt : '시간' ,

minTxt : '분' ,

toolTipPosition : 'up', // tooltip의 위치 up, down

isShowTooltip : true ,

isLimitMoveTooltip : false,

// callbacks

onChangedDate: null ,  //function(e, addDays){}  param  +1 다음날, -1 전날 날짜 변환 이벤트 발생 function(e, addDays) 

// 선언되지 않으면 날짜 변경이 되지 않음 .. 즉 당일꺼만 볼 경우... 날짜이동이 없는 경우

onClickBarChart : null ,// functiono(e, timeTxt) 클릭시 콜백 timeTxt 값을 리턴

onChangedViewType : null ,//function(e, t){}  t = 'day', 'hour', 'min'

onChangedTooltip : null, // functiono(e, left, timeTxt, isShow) left 위치좌표, top 은 필요없음, isShow 로 마우스 over 상태 확인, txt 로 시간 체크

onDrawBar : null // function(e, oeeResult) oeeResult 안에는 각 상태별 시간과 count 값이 json 구조로 저장되어 있음

},

      

_oeeType : {

day:{

rate:24*60*60, 

txt: function(){

this.options.hourTxt;

return 24 + this.options.hourTxt;

},

getPointTimeTxt:function(lastPoint, width){ // 속도 때문에 width 를 매번 계산하지 않는다 차이가 좀남

var rate =this._cunrrentType.rate/60/width;

return this.DateUtil.DateType.Min.execute(this._convertPx(lastPoint*rate + this.oeeTimeTxt[0].data("timepixel")));

}

} , 

hour:{

rate:60*60, 

txt: function(){

this.options.hourTxt;

return 1 + this.options.hourTxt;

},

getPointTimeTxt:function(lastPoint, width){

return this._oeeType.day.getPointTimeTxt.call(this, lastPoint, width);

}

} , 

min:{

rate:12*60, 

txt: function(){

this.options.hourTxt;

return 12 + this.options.minTxt;

},

getPointTimeTxt:function(lastPoint, width){

var rate =this._cunrrentType.rate/width;

var x = lastPoint*rate + this.oeeTimeTxt[0].data("timepixel")*60;

return this.DateUtil.DateType.Second.execute(x >= 60*60*24 ? x%(60*60*24) : x, true);

}

},

_cunrrentType : null,

_lastData : [],

// the constructor

_create: function() {

this._setCurrentType("day");

this.oeeBar = $("<div>",{"class":"imc-oee-bar"});

this.oeeBar.css({height : this.element.height()-30, width:this.element.width()-this.options.margin*2, "marginLeft":this.options.margin});

this.oeeTimeTick = $('<svg  xmlns="http://www.w3.org/2000/svg" height=50 width='+this.element.width()+'>');

this.tooltip = $("<div>",{"class":"imc-oee-tooltip " + this.options.toolTipPosition}).append(this._tooltipHtml())

this.oeeTimeTxt = [];

this.element

 .addClass( "imc-oee" )

 .disableSelection().append(this.oeeBar).append(this.oeeTimeTick).append(this.tooltip);

this._drawTimeTick();

this.tooltipManager.initialize.call(this);

},

_refresh: function() {

    this._drawbar(this._lastData, this.oeeTimeTxt[0].data("timepixel"));

this.tooltip.empty().append(this._tooltipHtml());

this.tooltipManager.initialize.call(this);

},

 

_destroy: function() {

this.oeeBar.remove();

this.oeeTimeTick.remove();

this.tooltip.remove();

this.element

 .removeClass( "imc-oee-bar" )

 .enableSelection()

 .css( "background-color", "transparent" ).empty();

},

_setOptions: function() {

this._superApply( arguments );

this._refresh();

},

_setOption: function( key, value ) {

if("dutyTime" == key && !/[0-9]{2}.[0-9]{2}/.test(value)){

return;

if(/oee|statusColor/.test(key)){

value = $.extend({}, this.options[key], value);           

}

this._super( key, value );

},

_drawTimeTick : function(){

var w = this.element.width();

var h = this.element.height();

var style = "stroke:"+this.options.tickColor+";stroke-width:"+this.options.tickWidth

this.oeeTimeTick.append(this._makeSVG('line', {

x1 : this.options.margin ,

x2 : w-this.options.margin,

y1 : 0 ,

y2 : 0 ,

style : style

}));

for(var i = 0 ; i <= 24 ; i++){

var x = this.options.margin + (w-this.options.margin*2)/24*i;

this.oeeTimeTick.append(this._makeSVG('line', {

x1 : x ,

x2 : x ,

y1 : 0 ,

y2 : 10 ,

style : style

}));

if( i % 6 == 0 ) {

this._drawTimeTxt(x, i / 6, this._createTime(x));

}

}

this._updateTimeTxt(0, this.oeeTimeTxt[0].data("orgpixel"));

},

_drawTimeTxt : function(x, index, $time){

var times = this.options.dutyTime.split(":");

var hour = parseInt(times[0]) + index * 6;

hour = hour > 24 ? hour % 24 : hour;

$time.data("orgpixel", parseInt(times[0])* 60 + parseInt(times[1]));

$time.data("timepixel", parseInt(times[0])* 60 + parseInt(times[1]));

this.element.append($time);

},

_createTime : function(x){

this.oeeTimeTxt[this.oeeTimeTxt.length] = $("<time>",{"class":"imc-oee-timetxt",text:"00:00",

style :["left:", (x-18), "px;top:", ( this.element.height()-10), "px;"].join("")});

return this.oeeTimeTxt[this.oeeTimeTxt.length-1];

},

_updateTimeTxt : function(x, startTime){

var rate = this._cunrrentType.rate/60, DateUtil = this.DateUtil, _convertPx = this._convertPx;

startTime += startTime < this._getSecond(this.options.dutyTime)/60 ? 1440 : 0;

x = parseInt(x/rate) * rate + (startTime ? startTime : 0), rate /= 4;

$.each(this.oeeTimeTxt, function( index, $this ) {

var px = x + index * rate;

$this.text(DateUtil.getString(DateUtil.DateType.Min, _convertPx(px), false));

$this.data("timepixel", px)

});

},

_findStartPoint : function(html, data, startMin, w, status, oeeResult){

var startSec = startMin*60, seconds = 0, dutySec = this._getSecond(this.options.dutyTime), pixel = 0;

startSec += (startSec < dutySec ?  60*60*24 : 0)

for (var i = 0, len = data.length; i < len; i++) {

seconds = this._getSecond(data[i][this.options.oee.startDateTime])

seconds = startSec > seconds && dutySec > seconds ? (seconds += 60*60*24) : seconds;

if(seconds > startSec){

pixel = (seconds- startSec)/this._cunrrentType.rate * w;

if(i > 0){

status = data[i-1][status];

this._addOeeResult(oeeResult[status], seconds- startSec);

}else{

status = "defaultColor";

}

return this._checkOverFirstPixel(html, status, pixel, w, i)

}else if(i == len -1 && seconds < startSec && startSec < seconds + parseInt(data[i][this.options.oee.second])){

pixel = (seconds + parseInt(data[i][this.options.oee.second])-startSec)/this._cunrrentType.rate * w;

return this._checkOverFirstPixel(html, data[i][status], pixel, w, -1)

}

}

return {index : -1, pixel : pixel};

},

_checkOverFirstPixel : function(html, status, pixel, w, i){

if(pixel > w){ // pixel 이 넓이 보다 큰 경우

i = -1, pixel = w;

}

this._addbaritem(html, status, pixel, w);

return {index : i, pixel : pixel}

},

_drawbar : function(data, startMin) {

var html = [], w = this.oeeBar.width(), oeeResult = this._getOeeTemplete(), totalPixel = 0, pixel, leakPixel=0,

status = this.options.oee.status, second = this.options.oee.second, startDateTime = this.options.oee.startDateTime;


for (var i = 0, len = data.length; i < len; i++) {

if(i == 0 && (this.oeeTimeTxt[0].data("orgpixel") != startMin || this.oeeTimeTxt[0].data("orgpixel") != this._getSecond(data[i][startDateTime])/60)){

var first = this._findStartPoint(html, data, startMin, w, status, oeeResult);

totalPixel =+ first.pixel;

i = first.index;

if(first.index < 0) break;

}

pixel = (data[i][second]/this._cunrrentType.rate) * w;

if(totalPixel + pixel > w){

pixel = w - totalPixel;

this._addOeeResult(oeeResult[data[i][status]], parseInt(pixel*this._cunrrentType.rate/w));

this._addbaritem(html, data[i][status], pixel, w); 

break;

}

leakPixel += pixel;

pixel = leakPixel - leakPixel%1;

leakPixel = leakPixel - pixel;

totalPixel += pixel;

if(len - 1 == i && leakPixel > 0){ // 잃어버린 1px 을 찾아서

pixel += 1;

}

this._addOeeResult(oeeResult[data[i][status]], data[i][second]);

this._addbaritem(html, data[i][status], pixel, w); 

}

this._bindEvent(this.oeeBar.empty().append(html.join('')).children(":not(.defaultColor)"));

if(this._cunrrentType == this._oeeType.day){ // day 는 굳이 다시 그릴필요 없음

this._trigger("onDrawBar", null , [oeeResult]);

}

},

_bindEvent: function(bar){

bar.on({mousemove: $.proxy(this.tooltipManager.calculatePoint, this), 

mouseleave: $.proxy(this.tooltipManager.hideToolTip, this), 

click : $.proxy(this.tooltipManager.clickPoint, this),

dblclick : $.proxy(this.tooltipManager.nextProgress, this)

}); // 이벤트는 우선 그냥 다 tooltip 에서 처리하자

},

_addbaritem : function(htmlarray, status, pixel, width) {

if(pixel > 0){

htmlarray.push('<span class="', status,  '" style="width:', pixel, 'px;background-color:',this.options.statusColor[status] ,'"></span>');

}

},

_makeSVG :function(tag, attrs) {

        var el= document.createElementNS('http://www.w3.org/2000/svg', tag);

        for (var k in attrs)

            el.setAttribute(k, attrs[k]);

        return el;

    },

_tooltipHtml : function(){

return ['<time>00:00</time>','<button type="button" data-value="day" class="on"><span>',this._oeeType.day.txt.call(this),'</span></button>'

            ,'<button type="button" data-value="hour"><span>',this._oeeType.hour.txt.call(this),'</span></button>'

            ,'<button type="button" data-value="min"><span>',this._oeeType.min.txt.call(this),'</span></button>', '<div class="arrow">'].join("");

},

_addOeeResult : function(oeeResult, sec){

if(sec > 0){

oeeResult.sec += parseInt(sec);

oeeResult.cnt ++;

}

},

_getOeeTemplete : function(){

var result = {}

for(var key in this.options.statusColor){

result[key] = { sec : 0 , cnt : 0 };

}

return result;

},

_setCurrentType : function(t){

if(this._oeeType[t]){

this._cunrrentType = this._oeeType[t];

}

},

_pad : function(value, length) {

value = String(value);

length = parseInt(length,10) || 2;

while (value.length < length)  { value = '0' + value; }

return value;

},

// 24시간 기준 pixel 변환

_convertPx : function(val){

val = (val >= 1440) ? val%1440 : val;

val = (val < 0) ? 1440 + val%1440 : val;

return val;

},

DateUtil : (function(){

var sep = ':';

var DateType = {

Min : { execute :

function(min, useSec){

       var hh = parseInt(min / 60);

min %= 60;

   return [pad(hh,2),sep ,pad(parseInt(min),2) ,(useSec ? (sep+"00") : "")].join("");

}

},

Second : { execute :

function(sec, useSec){

       var hh = parseInt(sec / 3600);

sec %= 3600;

   var mm = parseInt(sec / 60), ss = parseInt(sec % 60);

   return [pad(hh,2), pad(mm,2), useSec ? pad(ss,2) : ""].join(sep);

}

},

Hour :{ execute :

function(hour, useSec){

   return [pad(parseInt(hour),2), "00", useSec ? "00" : ""].join(sep);

}

},

}

,getString = function(fn, val, useSec){

return fn.execute.call(this, val, useSec=== undefined ? true : useSec);

}

,pad = function(value, length) {

value = String(value);

length = parseInt(length,10) || 2;

while (value.length < length)  { value = '0' + value; }

return value;

}

return{

DateType : DateType

,getString : getString

}

})(),

    _getdate : function(datestring) {

var extracted = datestring.match(/([0-9]{4}).([0-9]{2}).([0-9]{2}) ([0-9]{2}).([0-9]{2}).([0-9]{2})/);

return extracted && extracted.length > 6 ? new Date(extracted[1], parseInt(extracted[2])-1, extracted[3], extracted[4], extracted[5], extracted[6]) : new Date();

},

_getSecond : function(datestring) { //XX:XX , XX:XX:XX 둘다 처리 굳이 정규식 필요없음, 횟수가 많을 경우 정규식이 더느림

var extracted = datestring.split(/[-: ]/);

var len = extracted.length;

return extracted && extracted.length > 1 ? (extracted.length % 3 == 0 ? 

parseInt(extracted[len-3])*60*60 + parseInt(extracted[len-2])*60 + parseInt(extracted[len-1])

: parseInt(extracted[len-2])*60*60 + parseInt(extracted[len-1])*60 ) : 0;

},

_getTxt : function(lastPoint, width){

return this._cunrrentType.getPointTimeTxt.call(this, lastPoint, width);

},

_update : function(startMin){

this._updateTimeTxt(0, startMin);

this._drawbar(this._lastData, startMin);

},

// type : "min", "hour", "day"

setData : function(data, t, startDateTime){

    this._lastData = data;

this.setStartDateTime(t, startDateTime);

    },

    setStartDateTime : function(t, startDateTime){

    var startMin = t == "day" ? this.oeeTimeTxt[0].data("orgpixel") :

    (startDateTime !== undefined ? this._getSecond(startDateTime)/60 : this.oeeTimeTxt[0].data("timepixel"));

this._setCurrentType(t);

    this._updateTimeTxt(0, startMin);

    this._drawbar(this._lastData, startMin);

    },

    clear : function(){

    this.setData([], "day", this.options.dutyTime);

    },

    next : function(){

    if( this._getSecond(this.options.dutyTime)/60 +1440 <= this.oeeTimeTxt[0].data("timepixel") + this._cunrrentType.rate/60){

    if($.isFunction( this.options.onChangedDate)){

    this._trigger("onChangedDate", null , [+1]);

        this._updateTimeTxt(0, this.oeeTimeTxt[0].data("orgpixel"));

        console.log("trigger onChangedDate  +1 day")

    }else if(this._cunrrentType != this._oeeType.day){ // day 는 굳이 다시 그릴필요 없음

    this._update(this.oeeTimeTxt[0].data("orgpixel"));

    }

    }else{

    this._update(this.oeeTimeTxt[0].data("timepixel") + this._cunrrentType.rate/60);

    }

       

    },

    prev : function(){

    if(this._getSecond(this.options.dutyTime)/60 > this.oeeTimeTxt[0].data("timepixel") - this._cunrrentType.rate/60){

    if($.isFunction( this.options.onChangedDate)){

    this._trigger("onChangedDate", null , [-1]);

    this._updateTimeTxt(0, this.oeeTimeTxt[0].data("timepixel") - this._cunrrentType.rate/60);

    console.log("trigger onChangedDate  -1 day");

    }else if(this._cunrrentType != this._oeeType.day){ // day 는 굳이 다시 그릴필요 없음

    this._update(this.oeeTimeTxt[0].data("orgpixel") + 1440 - this._cunrrentType.rate/60);

    }

    }else{

    this._update(this.oeeTimeTxt[0].data("timepixel") - this._cunrrentType.rate/60);

    }

    },

    

    tooltipManager : (function(){

var displayed = false , hideToolTiptimer = [], lastPoint, width, pLeft, tWidth, tHWidth, width, aLeft, 

$parent, $tooltip, $time, $tabs, $arrow;

// $.proxy 이부분에서는 빼고 내부변수로 바꾸자 굳이 proxy 사용할 이유가 없음(오히려 비효율적)

var initialize = function(){

$parent = this, $tooltip =this.tooltip, $time = $tooltip.find('time'), $tabs = $tooltip.find('button'),$arrow = $tooltip.find('.arrow');

aLeft = $arrow.position().left, pLeft = $tooltip.parent().offset().left, tWidth = $tooltip.width(), tHWidth = tWidth/2, width =this.oeeBar.width();

$tooltip.on({mouseenter: cancelHideToolTip, mouseleave: $.proxy(hideToolTip, this)});

$tabs.click($.proxy(function(e){

var $this = $(e.currentTarget), index = $this.index()-1, t = $this.data("value"),x = 0, rate = this._cunrrentType.rate;

this._setCurrentType(t); 

if(t == 'day'){

            x = this.oeeTimeTxt[0].data("orgpixel");

            }else if(t == 'hour' && this._cunrrentType.rate > rate){

this._setCurrentType(t);

x = this.oeeTimeTxt[0].data("timepixel");

x = x - x % 60;

            }else{

            x = lastPoint * rate/60/width;

                rate = this._cunrrentType.rate/60;

                x = parseInt(x/rate) * rate +this.oeeTimeTxt[0].data("timepixel");

            }

this._trigger("onChangedViewType", null , [t]);

$tabs.removeClass('on').eq(index).addClass('on');

this._update(x);

}, this));

}

, calculatePoint = function(e) {

if(this.options.isLimitMoveTooltip){

_calculateLPoint(e, this.options.margin + this.options.margin); //덧셈 속도때문에

}else{

$tooltip.css({left: e.clientX - pLeft - tHWidth});

}

lastPoint = e.clientX - pLeft- this.options.margin;

$time[0].innerHTML = this._getTxt(lastPoint, width);

if (this.options.isShowTooltip && !displayed) {

this.tooltip.show();

displayed = true;

}

cancelHideToolTip();

this._trigger("onChangedTooltip", null , [lastPoint, $time[0].innerHTML, true]);

}

, _calculateLPoint = function(e, fMargin) { // 속도가 왜 Math 함수가 더느릴까...

var x = e.clientX - pLeft - tHWidth;

var limit = width- tWidth + fMargin;

if(x > 0){

if(x < limit){

$tooltip.css({left:x});

$arrow.css({left:"50%"});

}else{

$tooltip.css({left:limit});

$arrow.css({left: x-limit+tHWidth});

}

}else{

$tooltip.css({left:0});

$arrow.css({left: x + tHWidth});

}

}

, hideToolTip = function(event) {

event.preventDefault()

hideToolTiptimer[hideToolTiptimer.length] = setTimeout( $.proxy(hideToolTipAction, this), 100);

}


, cancelHideToolTip = function(event) {

for(var i = 0, len = hideToolTiptimer.length; i < len ; i++){

clearTimeout(hideToolTiptimer[i]);

}

hideToolTiptimer = [];

}


, hideToolTipAction = function() {

$tooltip.hide();

this._trigger("onChangedTooltip", null , [-1, '', false]);

displayed = false;

}

, nextProgress = function(e){

            lastPoint = e.clientX - pLeft- this.options.margin;

var $next = $tabs.filter(".on").next("button");

if($next.length > 0 ){

$next.trigger("click");

}else{

$tabs.first().trigger("click");

}

}

, clickPoint = function(){

this._trigger("onClickBarChart", null , [this._getTxt(lastPoint, width)]);

}

, clear = function(){

$tabs.removeClass("on").eq(0).addClass("on");

};

return {

calculatePoint : calculatePoint

, hideToolTip : hideToolTip

, cancelHideToolTip : cancelHideToolTip

, nextProgress : nextProgress

, clear : clear

, clickPoint : clickPoint

, initialize : initialize

}

})()

});

'IT > jquery' 카테고리의 다른 글

JSON 바인딩하여 HTML 만들기  (0) 2016.01.25
jQuery 플러그인 화면 도시여부 체크  (0) 2016.01.20
[제이쿼리(jQuery)] lesson 6  (0) 2014.12.16
[제이쿼리(jQuery)] lesson 5  (0) 2014.11.24
[제이쿼리(jQuery)] lesson 4  (0) 2014.11.24

ajax 로 호출하여 리턴된 데이터를 처리할 때 화면 도시를 위해서 html 에 바인딩 하는 경우가 많다.

 

아래의 예시와 같은 경우

 

var callBackAjax = function(data){

var html = "<div>" + data.tVal +"</div>"

/// .... 중략

}

 

이는 js 소스에 대한 복잡도 증가 및 가독성을 떨어트리게 된다.

이를 극복하기 위해 jquery 의 tmpl 을 사용하는 경우도 있다.

 

필자가 제작한것은 tmpl 과 유사한 간단한 jquery 플러그인이다.

(function( $ ) {

    $.fn.generateHtml = function(data) {

    var html = $(this).html();

var array = html.match(/@{(\w+[.]?)+}/g);

if(array == null){

return html;

}

for(var i = 0 , len = array.length ; i < len ; i++){

html = html.replace(array[i], findValue(array[i], data));

}

return html;

    },

    findValue = function(key, data){

key = key.replace(/(@{|})/g, '');

return reclusive(key.split(".") , data);

},

reclusive  = function(keys, data){

var result = data[keys[0]];

if(result === undefined || result === null){

return '';

}

if(keys.length > 1){

return reclusive( keys.slice(1), result);

}

return result;

};

}(jQuery));

 

 

 

사용법 예시

 

 // 사용할 HTML 의 구조를 만들고 ID 를 부여한다.

 // @{데이터의 key} 로 사용할 데이터를 명시한다.

<script id="templateTag" type="text">
    <div>
         <div> @{tVal} <div>
         <div> @{pVal} <div>
         <div> @{oee.tVal} <div>
         <div> @{oee.pVal} <div>
    </div>
</script>

 

<script>

$(function(){
 var testData = {tVal : 100, oee : {tVal:"233", pVal : "555"}} // 예시 데이터
 // pVal 값이 없는 경우는 공백입력됨
console.log($("#templateTag").generateHtml(testData)); 

})
</script>

 

실행 결과

    <div>
         <div> 100 <div>
         <div>  <div>
         <div> 233 <div>
         <div> 555 <div>
    </div>

 

 

 

 

'IT > jquery' 카테고리의 다른 글

누석 시간 바 차트 컴포넌트  (0) 2016.07.25
jQuery 플러그인 화면 도시여부 체크  (0) 2016.01.20
[제이쿼리(jQuery)] lesson 6  (0) 2014.12.16
[제이쿼리(jQuery)] lesson 5  (0) 2014.11.24
[제이쿼리(jQuery)] lesson 4  (0) 2014.11.24

selector 된 요소가 주어진 부모창(스크롤을 가진)에서 보이는지 안보이는지에 대한 여부를 체크하는

간단한 플러그인 이다.(해당 플로그인은 Y 축만 체크한다 필요하면 X축 계산만 추가하면 된다)



/**

 * 현재 해당 요소의 도시여부를 체크하는 function

 * @param parent 

 */

(function( $ ) {

    $.fn.visible = function(parent) {

var $parent = $(parent);

var bHeight = $parent.height();

var bTop = $parent.offset().top;

var top = $(this).offset().top;

if(top >= bTop && top < (bTop + bHeight)){

return true;

}

        return false;

    };

}(jQuery));


사용예시>

$("#Test").visible(".bottom");



스크롤이 되는 영역안에서 브라우져 상에 사용자에게 보여지는 영역안에 있지를 체크한다.(Y축만 고려함)

스크롤을 가진 부모에 대한 셀렉터를 파라미터를 받지말고, 부모중 스크롤을 가진 요소를 찾아서 처리해도 된다.


ps> x 축 추가는 간단한 응용이기 때문에 생략한다.

'IT > jquery' 카테고리의 다른 글

누석 시간 바 차트 컴포넌트  (0) 2016.07.25
JSON 바인딩하여 HTML 만들기  (0) 2016.01.25
[제이쿼리(jQuery)] lesson 6  (0) 2014.12.16
[제이쿼리(jQuery)] lesson 5  (0) 2014.11.24
[제이쿼리(jQuery)] lesson 4  (0) 2014.11.24

조금 더 java 의 format 과 유사한 형태이다.

String.form = function(str, arr) {
    var i = -1;
    function callback(exp, p0, p1, p2, p3, p4) {  
        if (exp=='%%') return '%';
        if (arr[++i]===undefined) return undefined;
        var exp  = p2 ? parseInt(p2.substr(1)) : undefined;
        var base = p3 ? parseInt(p3.substr(1)) : undefined;
        var val;
        switch (p4) {
            case 's': val = arr[i]; break;
            case 'c': val = arr[i][0]; break;
            case 'f': val = parseFloat(arr[i]).toFixed(exp); break;
            case 'p': val = parseFloat(arr[i]).toPrecision(exp); break;
            case 'e': val = parseFloat(arr[i]).toExponential(exp); break;
            case 'x': val = parseInt(arr[i]).toString(base?base:16); break;
            case 'd': val = parseFloat(parseInt(arr[i], base?base:10).toPrecision(exp)).toFixed(0); break;
        }
        val = typeof(val)=='object' ? JSON.stringify(val) : val.toString(base);
        var sz = parseInt(p1); /* padding size */
        var ch = p1 && p1[0]=='0' ? '0' : ' '; /* isnull? */
        while (val.length<sz) val = p0 !== undefined ? val+ch : ch+val; /* isminus? */
       return val;
    }
    var regex = /%(-)?(0?[0-9]+)?([.][0-9]+)?([#][0-9]+)?([scfpexd])/g;
    return str.replace(regex, callback);
}

if (!String.prototype.format) {
 String.prototype.format = function() {
  return String.form(this, Array.prototype.slice.call(arguments));
 }
}


alert("<tr><td>%s</td><td>%s</td><td>%5.2f</td></tr>".format( "A" , "B" , 12.534));

2015 사운드홀릭 EXIT (2015.05.30-31) 잠실보조경기장


비온다고 해서 걱정했는데 잠깐 살짝 내리고 거의 안와서

선선하고 좋았습니다.


멀리서 찍은 사진이라 화질이 별로지만

그래도 올려봅니다 ㅎㅎ


곧 구매한 nx 미니용 망원렌즈+접안렌즈 키트가 오면

그때 정말 근사하게 찍어줄거임!!




<내귀에도청장치>





<피터팬컴플렉스>



<로맨틱펀치>






'일상' 카테고리의 다른 글

퀘스트바 (단백질바) 후기  (0) 2016.09.27
산토리 프리미엄 몰츠 크리미 서버  (0) 2016.09.27
핸드폰 잃어버린 울엄마 ...  (0) 2015.05.19
개추움 ...  (0) 2015.01.08
전주여행 사진 모음 --- ☆  (0) 2014.12.11





[엄마] 강남터미널화장실에 폰놓고나와서


[엄마] 화장실찾아해매다못찾고


[나] 헐


[엄마] 안내센타에가서


[나] 못살아


[엄마] 전화했더니외국인이전화받아서


[나] -_-


[엄마] 못알아들어서


[엄마] 한국사람한태맡겨놓고갔더라고


[나] 착하네 외국놈


[엄마] 고맙다는말도못했어


[나] ㅋㅋㅋㅋㅋㅋㅋ


[엄마] 외국년


[나] -.-




'일상' 카테고리의 다른 글

산토리 프리미엄 몰츠 크리미 서버  (0) 2016.09.27
2015 사운드홀릭 EXIT (2015.05.30-31) 잠실보조경기장  (0) 2015.06.01
개추움 ...  (0) 2015.01.08
전주여행 사진 모음 --- ☆  (0) 2014.12.11
♬ 동물원 나들이 ♬  (0) 2014.12.10



피씨에 설정된 기본브라우져로 url 파라미터를 던져 화면을 도시하는 방법


java.awt.Desktop.getDesktop().browse(java.net.URI.create("http://google.com"));


'IT > java' 카테고리의 다른 글

java 의 string format  (1) 2014.12.05

+ Recent posts