반응형
블로그 이미지
개발자로서 현장에서 일하면서 새로 접하는 기술들이나 알게된 정보 등을 정리하기 위한 블로그입니다. 운 좋게 미국에서 큰 회사들의 프로젝트에서 컬설턴트로 일하고 있어서 새로운 기술들을 접할 기회가 많이 있습니다. 미국의 IT 프로젝트에서 사용되는 툴들에 대해 많은 분들과 정보를 공유하고 싶습니다.
솔웅

최근에 올라온 글

최근에 달린 댓글

최근에 받은 트랙백

글 보관함

카테고리

JQuery Mobile - Theming Toolbars

2012. 8. 7. 04:57 | Posted by 솔웅


반응형

Bar theming


header와 footer bar 모두 디폴트로 theme a 로 스타일 됐습니다. 왜냐하면 이 바들은 특히 페이지의 visual hierarchy에서 primary 이기 때문이죠.


Theming headers and footers


이 header와 footer 바에 다른 theme을 적용하려면 data-theme attribute를 추가하시고 특정 테마 swatch (a,b,c, etc.)를 넣으시면 됩니다. 예를 들어 아래 예제는 swatch b를 설정하는 소스코드입니다.



<div data-role="header" data-theme="b"> 
	<h1>Page Title</h1> 
</div> 


Theming buttons in toolbars


header 블럭에 링크를 추가하게 되면 자동적으로 버튼으로 만들어지고 테마는 그 바의 테마 swatch가 적용 됩니다. 이 버튼만 다른 테마를 적용하시려면 data-theme attribute를 사용해서 그 버튼만 다른 테마가 적용되도록 만들 수 있습니다. 에를들어 헤더를 테마 c가 적용되도록 하면 양쪽의 버튼은 자동적으로 테마 c 가 적용된 버튼이 됩니다. 그 중 Save 버튼만 튀게 보이게 하고 싶으면 data-theme attribute를 오버라이드 해서 Save 버튼의 anchor에  다른 테마를 적용해서 넣으시면 됩니다.


<a href="add-user.php" data-theme="b">Save</a> 

Theme variations


아래는 헤더와 footer 바에 그리고 그 안의 버튼들에 다양하게 테마를 적용한 경우들 입니다.


Headers



Footers

아래는 안에 link 버튼이 들어있는 footer 바들 입니다. footer는 header하고 약간 다른 prescriptive markup convention을 가지고 있습니다. 헤더에서는 링크만 걸면 자동으로 버튼 모양으로 만들어지고 또 2개 까지만 만들수 있고 하는 규칙이 있는데 footer에는 그런 규칙이 없습니다. 그래서 원하시는 디자인으로 꾸미시려면 layout grids 나 다른 custom styles로 만드실 수 있습니다.





bars-themes.html



여기까지 jQuery Mobile Tutorial Toolbars 부분을 마치고 다음부터는 Buttons 부분으로 들어갑니다.
이제 본격적으로 jQuery Mobile 프로젝트가 시작할것 같으니까 좀 더 속도를 내서 jQuery Mobile 공식 튜토리얼을 모두 훑어봐야 겠어요.



반응형


반응형

jQuery Mobile을 배우는데 Tutorial을 봐도 깔끔하게 정리되지 않아서요.

뭔가 제대로 된 App 소스 하나.. 완성된 App 소스 하나 제대로 분석해 보면 좀 더 많이 이해 되지 않을까 싶은 마음에 ....


여기 저기 소스코드를 찾다가 Mobile To-Do List를 찾았습니다.


지난 세기(Century)에 처음 웹 프로그래밍을 배울때 쇼핑몰 소스 가지고 설명한 책을 사서 무조건 개발에 들어갔던 기억이 나네요.


PHP로 만든건데.. 그때는 PHP 뿐만이 아니라 아무런 언어도 배우지 않았을 때거든요.


대충 한두달 짜리 강좌는 들었지만 전혀 프로그래밍과는 상관없는 문과 출신이어서 뭔소린지 도통 이해 못하겠더라구요.

그래서 이해하고 뭘 시작하면 안될것 같아서.. 무작정 쇼핑몰 개발에 들어갔죠..


jQuery Mobile도 튜토리얼을 통해 각 기능만 봤을 때는 쉬워보이더만 막상 뭘 개발하려고 하니까 이것 저것 막히는게 많네요.


튜토리얼을 어느정도 공부했으니 이제부터는 여기 저기 샘플 소스 코드 사냥에 나서서 분석하고 응용해서 내것도 만들고 그래야 겠어요.


제가 찾은 소스는 Mobile To-Do List 입니다.

여기로 가시면 소스코드를 다운 받을 수 있습니다.


뭐 혼자 소스 분석 하실 수 있으신 분은 직접 다운받아서 하시면 됩니다.

이 블로그는 제가 공부하기 위해서 만든거니까 저는 그냥 제 공부를 위해서 정리해 놓는것 뿐입니다.


혹시 다른 분들 좋은 jQuery Mobile로 만든 좋은 샘플 앱 소스코드 있으시면 정보 부탁드려요.

제가 잘 분석해서 여기에 올릴께요.


먼저 제가 분석할 Mobile To-Do List 앱 화면은 아래와 같습니다.



index.html을 치시면 위와 같은 화면이 나올겁니다.

처음 실행 시키는 거니까 내용은 아무것도 없습니다.

내용을 만들려면 New 버튼을 클릭합니다.




그러면 내용을 넣을 수 있는 화면이 나옵니다.

우선 Description을 넣고 select 메뉴에서 중요도를 정합니다.

제대로 작성했으면 Create 버튼을 누릅니다.



그러면 다시 첫번째 화면으로 오는데요.

좀 전에 저장한 데이터가 쿠키로 저장되고 그것을 불러와서 화면에 뿌려 줍니다.

오른쪽에 있는 X 버튼을 누르시면 해당 내용이 지워지구요.


보니까 딱 2페이지 짜리 앱이네요.


우선 jQuery Mobile로 두 페이지를 만들고 버튼들에 각각 이벤트가 일어나면 어떤 일을 하도록 JavaScript로 프로그래밍을 해야 할 것 같습니다.


그럼 다음 글 부터 직접 소스코드를 놓고 분석을 해 봐야겠습니다.


참 이 소스코드를 분석하려고 바로 전에 jquery.cookie.js, jQuery.tmpl, json2.js  플러그인을 분석했습니다.


필요하신 분들은 그 글들 먼저 보시면 좋을 거예요.


반응형

json2.js 플러그 인 알아보기

2012. 8. 4. 20:38 | Posted by 솔웅


반응형

Parsing a message in JavaScript with JSON


지난 시간에 자바스크립트에서 JSON을 어떻게 생성하는지에 대해 배웠습니다. 이제 자바스크립트에서 JSON 안의 메세지를 어떻게 parse 하는지에 대해 알아보겠습니다.

"String.parseJSON(filter)" 메소드를 이용해서 자바스크립트 내에서 JSON으로 메세지를 parse 할 수 있습니다. 이 JSON 메세지는 sting이나 객체로 parse 됩니다. filter 파라미터는 optional 입니다. filter 메세지나 결과를 transform 하는데 사용됩니다. 이 메소드는 자바스크립트의 eval()메소드를 message parse를 위해 내부적으로 사용합니다.

아래 ParseMessageJSON.htm의 전체 예제 코드가 있습니다.



ParseMessageJSON.htm


<html>
<head>
<title>Parsing Message using JSON in JavaScript</title>
<script language="javascript" src="json2.js"></script>
<script language="javascript" >
var students = {
   
"Maths" 
  "Name"  "Amit",  // First element
  "Marks" 67,
  "age" 23 },  
  {
   "Name"   "Sandeep",  // Second element
  "Marks" 65,
  "age" 21 }
 
 
// Printing Maths array values in the alert message
var i=0
var arrayObject = new Array();
for(i=0;i<students.Maths.length;i++)
{  
  arrayObject.push(students.Maths[i].Name);
  arrayObject.push(students.Maths[i].Marks);
  arrayObject.push(students.Maths[i].age);
}  
  alert("Parsing JSON Message Example ");
  alert(arrayObject.toJSONString().parseJSON());
</script>
</head>
<body>
 Parsing Message using JSON in JavaScript
</body>
</html>



이 예제를 실행시키려면 json2.js 파일이 필요합니다. 이 파일을 ParseMessageJSON.htm내에 include 해야 합니다. 이 json2.js는 creating message in JavaScript with JSON 강좌에서 사용했던 것과 같은 겁니다.


Output:


ParseMessageJSON.htm를 실행시키시면 아래와 같은 결과가 나올 겁니다.




Download Code


======== o ========= o ============ o ============= o =============


지금까지 3개의 article 을 통해서 쿠키, 탬플릿, json 관련된 플러그인 사용법을 알아봤습니다.

jQuery Mobile 샘플을 하나 분석해 보려고 봤더니 이 3개의 플러그인이 있어서 공부해 봤습니다.

아주 도움이 많이 된 것 같네요.


마지막 플러그인인 json2.js 는 이 글가지고 약간 부족할 수도 있을 것 같은데요.

네이버에서 json2.js로 검색하셔서 따로 읽어 보세요.


그럼 다음시간에는 원래 하기로 했던 jQuery Mobile 예제 파일을 분석해 보겠습니다.


반응형


반응형

jQuery.tmpl( template [, data] [, options] ) Returns: jQuery


Description: Render the specified HTML content as a template, using the specified data.


  • jQuery.tmpl( template [, data] [, options] )    

  • version added: 1.4.3

    template The HTML markup or text to use as a template.

    data The data to render. This can be any JavaScript type, including Array or Object.

    options An optional map of user-defined key-value pairs. Extends the tmplItem data structure, available to the template during rendering.


이 글은 jQuery Templates 플러그인 (jquery-tmpl)과 관련된 문서입니다. 이 플러그인은  http://github.com/jquery/jquery-tmpl 에서 다운로드 받으실 수 있습니다.

jQuery.tmpl() 메소드는 .appendTo, .prependTo, .insertAfter, .insertBefore 같은 것들과 어울려 아래의 예제처럼 사용되도록 만들어 졌습니다.


Example:


$.tmpl( "<li>${Name}</li>", { "Name" : "John Doe" }).appendTo( "#target" );




이 template 파라미터는 다음과 같은 것들이 될 수 있습니다.

  • 마크업을 포함한 string
  • 템플렛으로 사용되기 위한 콘텐트를 가지고 있는 HTML element (혹은 element로 둘러 싸여져 있는 jQuery 객체)
  • named template의 이름과 연관돼 있는 string (jQuery.template() and .template() 를 보세요.)
  • 컴퍼일된 템플렛 함수 ( jQuery.template() and .template() 를 보세요.)


만약에 data가 배열이라면 그 탬플릿은 배열의 각 아이템에 대해 한번 render 됩니다. 데이터가 객체이거나 data 파라미터가 없거나 null 이라면 single template item이 render 됩니다.

return 값은 렌더링된 탬플릿 아이템으로 만들어진 element들의 jQuery collection 입니다. (각 배열에 있는 하나 혹은 각각의 데이터 아이템). 만약 템플렛에 top level element만이 포함돼 있다면 배열의 각 데이터에 대해 한개의 element가 있게 됩니다.


HTML DOM에 렌더링된 템플릿 아이템을 insert 하기 위해 리턴된 jQuery collection은 DOM에 directly insert 되면 안됩니다. .appendTo, .prependTo, .insertAfter or .insertBefore 등과 연결되서 사용되어져야 합니다.


$.tmpl( myTemplate, myData ).appendTo( "#target" );


See also .tmpl().


Example


아래 예제는 jQuery.tmpl()을 로컬데이터로 render 하기 위해 어떻게 사용되는지를 보여 줍니다. template은 하나의 string 이 사용됐습니다.


<ul id="movieList"></ul>

<script type="text/javascript">
  var movies = [
      { Name: "The Red Violin", ReleaseYear: "1998" },
      { Name: "Eyes Wide Shut", ReleaseYear: "1999" },
      { Name: "The Inheritance", ReleaseYear: "1976" }
  ];

  var markup = "<li><b>${Name}</b> (${ReleaseYear})</li>";

  // Compile the markup as a named template
  $.template( "movieTemplate", markup );

  // Render the template with the movies data and insert
  // the rendered HTML under the "movieList" element
  $.tmpl( "movieTemplate", movies )
      .appendTo( "#movieList" );
</script>


Using Remote Data


일반적으로 데이터는 로컬이 아닙니다. 대신에 데이터는 리모트 서비스나 페이지로 request 하는 Ajax를 사용합니다. 아래 그 예제가 있습니다.



var markup = "<li><b>${Name}</b> (${ReleaseYear})</li>";

// Compile the markup as a named template
$.template( "movieTemplate", markup );

$.ajax({
  dataType: "jsonp",
  url: moviesServiceUrl,
  jsonp: "$callback",
  success: showMovies
});

// Within the callback, use .tmpl() to render the data.
function showMovies( data ) {
  // Render the template with the "movies" data and insert
  // the rendered HTML under the 'movieList' element
  $.tmpl( "movieTemplate", data )
    .appendTo( "#movieList" );
}


The Markup for the Template


여러분은 (computed 되거나 원격으로 obtained 되었을) string 으로부터 혹은 페이지에 있는 inline markup으로부터 템플릿을 위한 markup을 받을 수 있습니다. 어떻게 inline markup을 사용하는지를 보시려면 .tmpl()를 보세요.


Caching the Template


탬플릿이 렌더링 될 때 markup은 우선 컴파일된 탬플릿 function으로 convert 됩니다. 항상 $.tmpl( markup , myData ).appendTo( "#target" )이 call 됩니다. 이 탬플릿은 recompile 됩니다. 만약 같은 탬플릿이 렌더링 데이터로 한번 이상 사용된다면 이 compil된 템플릿이 cache 될 거라는 걸 염두에 두세요. 페이지의 inline markup 에서가 아니라 string 으로ㅜ터 획득 된 markup을 사용할 때 템플릿을 cache 하기 위해서는 재사용을 위해 named template을 생성하기 위해 $.template( name, markup )를 사용하세요.


Template Tags, Expressions, and Template Variables


${}같은 탬플릿 태그들은 text와 HTML markup을 추가할 수 있도록 jQuery 탬플릿 안에서 사용될 수 있습니다. 이러면 탬플릿의 composition, hierarchical data에 대한 iteration, 탬플릿 렌더링의 parameterization 같은 여러 상황에서 유용하게 사용될 수 있겠죠. 탬플릿 태그들은 데이터 아이템 필드의 value들에 기초한 content나 $item 같은 탬플릿 변수를 렌더링할 수 있습니다. 각각의 탬플릿 태그들에 대해 알아보시려면 다음 문서들을 보세요. ${}, {{each}}, {{if}}, {{else}}, {{html}}, {{tmpl}} and {{wrap}}


The options Parameter, and Template Items


탬플릿내의 데이터 아이템이 렌더링 된 결과인  각 탬플릿 아이템들은 tmplItem data structure 와 연관되어 있습니다. 이것은 jQuery.tmplItem().tmplItem(), 혹은 $item template 변수를 사용해서 접근될 수 있습니다. jQuery.tmpl()의 옵션 파라미터로 pass 된 필드들이나 anonomyous methods 들은 tmplItem data structure를 extend 할 겁니다. 그리고 다음의 예제에서 처럼 탬플릿화 할 수 있습니다.


var markup = "<li>Some content: ${$item.myMethod()}.<br/>" 
           + " More content: ${$item.myValue}.</li>";

// Compile the markup as a named template
$.template( "movieTemplate", markup );

// Render the template with the movies data
$.tmpl( "movieTemplate", movies,
  { 
      myValue: "somevalue", 
      myMethod: function() { 
          return "something";
      } 
  } 
).appendTo( "#movieList" );


Additional Notes:


  • Netflix recently changed the API that we use in the remote service example below. We are aware that this change breaks the demo and will work on an update as soon as we can.


Examples:


Example: Render local data using jQuery.tmpl().


<!DOCTYPE html>
<html>
<head>
 
<script src="http://code.jquery.com/jquery-latest.min.js"></script>
 
<script src="http://ajax.microsoft.com/ajax/jquery.templates/
beta1/jquery.tmpl.min.js"
></script>
</head>
<body>
 
<ul id="movieList"></ul>

<script>
 
var movies = [
 
{ Name: "The Red Violin", ReleaseYear: "1998" },
 
{ Name: "Eyes Wide Shut", ReleaseYear: "1999" },
 
{ Name: "The Inheritance", ReleaseYear: "1976" }
 
];

var markup = "<li><b>${Name}</b> (${ReleaseYear})</li>";

/* Compile the markup as a named template */
$
.template( "movieTemplate", markup );

/* Render the template with the movies data and insert
   the rendered HTML under the "movieList" element */

$
.tmpl( "movieTemplate", movies )
 
.appendTo( "#movieList" );
</script>

</body>
</html>

Demo:

Example: Render data from a remote service, using jQuery.tmpl().

<!DOCTYPE html>
<html>
<head>
 
<script src="http://code.jquery.com/jquery-latest.min.js"></script>
 
<script src="http://ajax.microsoft.com/ajax/jquery.templates/beta1/
jquery.tmpl.min.js"
></script>
</head>
<body>
 
<button id="cartoonsBtn">Cartoons</button>
<button id="dramaBtn">Drama</button>

<ul id="movieList"></ul>

<script>
var markup = "<li><b>${Name}</b> (${ReleaseYear})</li>";

/* Compile the markup as a named template */
$
.template( "movieTemplate", markup );

function getMovies( genre, skip, top ) {
  $
.ajax({
    dataType
: "jsonp",
    url
: "http://odata.netflix.com/Catalog/Genres('" + genre
   
+ "')/Titles?$format=json&$skip="
   
+ skip + "&$top=" + top,
    jsonp
: "$callback",
    success
: function( data ) {
     
/* Get the movies array from the data */
     
var movies = data.d;

     
/* Remove current set of movie template items */
      $
( "#movieList" ).empty();

     
/* Render the template items for each movie
      and insert the template items into the "movieList" */

      $
.tmpl( "movieTemplate", movies )
     
.appendTo( "#movieList" );
   
}
 
});
}

$
( "#cartoonsBtn" ).click( function() {
  getMovies
( "Cartoons", 0, 6 );
});

$
( "#dramaBtn" ).click( function() {
  getMovies
( "Drama", 0, 6 );
});

</script>

</body>
</html>



반응형


반응형

Working with cookies using jQuery and JavaScript


jQuery나 Javascript를 통해 쿠키를 사용하는 overview 입니다.

오늘은 jQuery 나 pure javascript 를 통해서 쿠키를 쉽게 사용할 수 있도록 하는 몇가지 테크닉을 다루겠습니다.


What is a cookie?


쿠키는 Hypertext Transfer Protocol (HTTP) requests 와 response 를 포함하고 있는 text string 입니다. 쿠키는 state 정보를 유지하기 위해 사용됩니다. 여러 웹사이트를 돌아다니다가 그 웹사이트에 다시 돌아왔을 때 일관성을 유지시켜주기 위해 사용되는 것이죠. 이 글은 쿠키에 대한 정보를 제공하고 있습니다.


What do i do with cookies


요즘은 주로 쿠키가 유저의 로그인 정보를 저장하기 위해서 가장 많이 쓰이고 있습니다. 이 의미는 유저가 로그인 된 상태로 특정 시간동안 유지하도록 하는 기능을 쿠키가 제공해 주고 있다는 것이죠. 그 이외에도 그 웹사이트에 머물러 있었던 마지막 순간의 정보에 대한 아주 temporary 한 정보들을 저장하기도 합니다.


쿠키는 외부로부터 여러분의 웹사이트에 의해 혹은 유저에 의해 접근해야될 필요가 있는 정보 저장에는 사용하지 않습니다. 각각의 컴퓨터나 브라우저의 local에 쿠키들은 저장됩니다.





How do i actually use them


쿠키는 모든 웹 프로그래밍 언어에 의해 접근될 수 있습니다. 이 의미는 자바스크립트, python, php 그리고 다른 많은 언어들이 쿠키를 다룰 수 있다는 거죠. 첫번째로 쿠키를 다루는 가장 쉬운 방법인 jQuery를 이용한 쿠키 다루기를 설명하겠습니다.

jQuery는 jQuery library와 함꼐 사용하는 plugin을 가지고 있습니다. (이 링크에서 받으실 수 없으시면 아래 파일을 받으세요.)


jquery.cookie.js


이 플러그인을 이용하시면 정말 쉽게 쿠키를 저장하고 또 거기에 접근하실 수가 있습니다. 그럼 쿠키를 저장하고 displaying 하는 부분의 코드를 볼까요.



  1. <html>  
  2. <head>  
  3. <script src="http://code.jquery.com/jquery-latest.js"></script>  
  4. <script src="jquery.cookie.js"></script>  
  5. <script>  
  6. $(document).ready(function(){  
  7.     // set cookie  
  8.     $.cookie('my_cookie_name', 'value inside of it');  
  9.   
  10.     // get cookie  
  11.     alert($.cookie('my_cookie_name'));  
  12.   
  13.     // delete cookie  
  14.     $.cookie('my_cookie_name', null);  
  15. });  
  16. </script>  
  17. </head>  
  18. <body>  
  19. <a class="setme">Set Me</a>  
  20. <a class="tellme">Tell Me</a>  
  21. <a class="delete">DeleteM</a>  
  22. </body>  
  23. </html>  



이제 코드의 중요한 부분을 살펴보죠. 첫번째로 jQuery를 embed 해야죠. 그 다음에 jquery cookie 플러그인을 add 했습니다. 그리고 저 아름다운 jQuery code를 시작합니다.


set cookie 하는 부분은 그냥 보시기만 하셔도 아시겠죠? 딱 한 줄 입니다. 그러면 my_cookie_name이라는 쿠키가 세팅 될 겁니다. 그 값은 value inside of it 이 되겠죠. 

$.cookie() 플러그인에 두개의 파라미터를 pass 했습니다. 이름과 값에는 작은 따옴표나 큰 따옴표를를 붙여야 합니다.


쿠키를 get 하는 방법도 아주 직관적입니다. 그냥 쿠키 이름을 pass 하시면 됩니다. jQuery 플러그 인에요. 그러면 우리가 저장한 값을 가지게 될 겁니다.

그리고 마지막으로 쿠키를 지우는 것은 쿠키를 저장하는 것과 거의 같습니다.

단지 다른것이 있다면 값에 null 을 넣으시면 됩니다.


Now let’s go more advanced


이제 쿠키를 세팅하고 값을 add 하고 저장된 값을 delete 하는 것 까지 다 했습니다.

이제 쿠키를 특정 시간 동안 저장하는 것 같은 혹은 특정 date 까지 저장하는 방법 같은 것을 알아보겠습니다.



  1. // cookie expires in 10 days  
  2. $.cookie('cookie_name''our value', { path: '/', expires: 10 });  
  3.   
  4. // cookie expires in a set JavaScript Date  
  5. var date = new Date();  
  6. $.cookie('cookie_name''our value', { path: '/', expires: date });  



첫번째 코드는 이 쿠키가 10일 이후에 expire 되도록 세팅한 겁니다. 이게 끝입니다. 정말 간단하죠. 세번째 파라미터에 쿠키가 저장 될 path를 넣습니다. 그리고 / 를 넣어서 깔끔하게 정리하시고 다음으로는 expiration days를 넣으시면 됩니다.


두번째 코드는 우선 date 변수를 만듭니다. 이 date 변수에는 현재 날짜가 들어갑니다. 그리고 이것을 특정 JavaScript date 에 expire 되게 쿠키에 세팅할 겁니다. real date를 넣으면 여러분이 그 javascript date를 넣을 때까지는 작동을 하지 않을 겁니다. 자세한 사항은 JavaScript date 에 대한 글을 읽어 보세요.


How to do this with JavaScript

아래에는 일반 자바스크립트에서 쿠키를 다루는 예제입니다.


  1. function setCookie(key, value) {  
  2.    var expires = new Date();  
  3.    expires.setTime(expires.getTime() + 31536000000); //1 year  
  4.    document.cookie = key + '=' + value + ';expires=' + expires.toUTCString();  
  5.    }  
  6.   
  7. function getCookie(key) {  
  8.    var keyValue = document.cookie.match('(^|;) ?' + key + '=([^;]*)(;|$)');  
  9.    return keyValue ? keyValue[2] : null;  
  10.    }  
  11.   
  12. setCookie('test''5');  
  13. alert(getCookie('test'));  



두개의 함수를 만들었습니다. setCookie와 getCookie 입니다. setCookie에는 두개의 변수를 pass 해야 합니다. key와 value 한 쌍이죠. 위 예제에서는 쿠키의 expire 날을 1년으로 잡았습니다. 물론 여러분이 바꿀 수도 있죠. 위에 javascript date에 대한 링크가 있죠? 거길 참조하세요.


이 글을 읽으시고 쿠키에 대해서 그리고 쿠키를 다루는 법에 대해서 감을 잡으셨기를 바랍니다.


======================================================


위 글은 jQuery Mobile 이 아니라 jQuery 에서 쿠키 관련 플러그인을 사용하는 법을 알려주고 있습니다.

하지만 jQuery Mobile에서도 같은 방법으로 이용하시면 됩니다.


예제를 하나 공부하려고 하는데 거기에 저 플러그인을 사용했길래 먼저 이 플러그인을 한번 훑어 봤습니다.


반응형


반응형

10 handy jQuery mobile tips and snippets to get you started



새로운 기술은 가끔 처음 시작하는게 제일 어려울 수가 있는법이죠.

그런분들을 위해서 여기 jQuery Mobile library와 관련된 팁이나 트릭 그리고 관련된 간단한 샘플들을 여기 모아봤습니다.

처음 시작하시는 분들이 아실 필요가 없는 부분들은 과감히 건너 뛰었어요.


1. A full basic page

가장 기본이 되는 페이지의 full mark-up 입니다. 간단한 single page를 표현하시려면 여기 있는 코드가 가장 기본이 되는 겁니다.

<!DOCTYPE html>
<html>
<head>
<title>Page Title</title>
<link rel="stylesheet" href="http://code.jquery.com/mobile/1.0a3/jquery.mobile-1.0a3.min.css" />
<script type="text/javascript" src="http://code.jquery.com/jquery-1.5.min.js"></script>
<script type="text/javascript" src="http://code.jquery.com/mobile/1.0a3/jquery.mobile-1.0a3.min.js"></script>
</head>
<body>
<div data-role="page" id="home">
 <div data-role="header">
  <h1>Header</h1>
 </div>
 <div data-role="content">
  <p>Content goes here</p>
 </div>
 <div data-role="footer">
  <h4>Footer</h4>
 </div>
</div>
</body>
</html>



2. Where to add traditional jQuery calls


처음 시작할 때 모바일 플러그인이 trigger 되기 전에 뭔가 해야 되는게 있다는 걸 알게 됐습니다. 기본 jQuery 를 사용하고 싶었거든요.

그러면 모바일 plug-in을 참조하기 이전에 jQuery call을 넣어주시면 됩니다. 그러면 jQuery Mobile 보다 jQuery command가 먼저 실행이 되겠죠. 아래에 그 패턴이 있습니다.


<link rel="stylesheet" href="http://code.jquery.com/mobile/1.0a3/jquery.mobile-1.0a3.min.css" />
<script type="text/javascript" src="http://code.jquery.com/jquery-1.5.min.js"></script>
<script> $(document).ready(function() { // Your jQuery commands go here before the mobile reference }); </script>
<script type="text/javascript" src="http://code.jquery.com/mobile/1.0a3/jquery.mobile-1.0a3.min.js"></script>




3. Disable AJAX navigation for all links at once


AJAX navigation은 아주 멋지죠. 그런데 가끔 이 기능을 disable 시킬 필요가 있을 때가 있어요. 이럴 때 AJAX navigation을 사용하지 말도록 할 수 가 있습니다.

헤더부분에서 jQuery mobile library를 reference 한 후 에 아래 코딩을 추가해 보세요.

jQuery mobile library가 먼저 load 되 있어야 합니다. 그러니까 반드시 그 다음에 넣어야 합니다.


<script> $(document).ready(function() { // disable ajax nav $.mobile.ajaxLinksEnabled = false; }); </script>




4. Stop some key items from being truncated


jQuery Mobile library의 기능 중 하나는 내용이 길면 알아서 UI element에 맞춰서 잘라준다는 겁니다.

그런데 두가지 경우에 이런 기능이 좀 불편해 질 때가 있더라구요. 첫번째는 full text를 보고 싶을 때구요. 두번째는 footer text 입니다. 이런것들에서 내용이 잘려서 "..."로 표시되면 좀 그렇죠.

이 두가지 경우에는 디폴트로 아래와 같은 CSS를 오버라이드 해 주세요.


For list items:

body .ui-li .ui-li-desc {
 white-space: normal;
 }

For footer content:

body .ui-footer .ui-title {
 white-space: normal;
 }

5. Use media queries to target devices

작업을 하면서 구현해야 할 것 중에 하나가 각 device 별로 어떻게 따로따로 CSS를 구현하느냐 입니다. 예를 들어 아이패드에서는 2개의 컬럼 레이아웃을 쓰고 싶고 스마트폰에서는 한개의 컬럼 레이아웃을 써야 할 때가 있잖아요.

이것을 구현하려면 media queries 를 사용하시면 됩니다.

이 미디어쿼리를 이용해서 각 스크린 사이즈 별 CSS를 구현하실 수 있습니다. 


아래 링크를 보시면 두개의 아주 훌륭한 아티클이 있습니다. 참조하세요.


6. Target platforms with jQuery


특정 디바이스에 특정 CSS를 실행해야 할 때가 있죠. 그리고 오직 jQuery 만 사용해야 될 떄가 있습니다. 여기 some code from Snipplr에서 가져온 코드가 있는데요. jQuery 로 유저 디바이스에 맞게 jQuery의 segment portion들을 쉽게 사용할 수 있도록 하는 방법입니다.

 var deviceAgent = navigator.userAgent.toLowerCase();
 var agentID = deviceAgent.match(/(iphone|ipod|ipad|android)/);
 if(agentID.indexOf("iphone")>=0){
  alert("iphone");
 }
 if(agentID.indexOf("ipod")>=0){
  alert("ipod");
 }
 if(agentID.indexOf("ipad")>=0){
  alert("ipad");
 }
 if(agentID.indexOf("android")>=0){
  alert("android");
 }

7. Use full paths for the targets of form action attributes

One quirk of the library seems to be its difficulty in finding target pages to post forms to… that is, unless you use the full path from the root of the website.

For example, I’ve found that this form tag never finds its target:

<form action=" form-handler.php " method="get" >

Whereas a full path like this works as expected:

<form action="/current-directory/form-handler.php" method="get" >

Also, be sure that the results from the form handler produce a full, valid jQuery mobile page, as shown in tip #1.


8. Create pop-up dialogs

jQuery Mobile library의 좋은 기능 중 하나는 built-in pop-up하고 dialog box 기능이죠. 정말 간단하고 쉽게 이용할 수 있습니다. 기본적으로 data-rel="dialog" 를 붙여주면 됩니다.

두가지만 기억하세요. 첫번째로 target page는 반드시 full-blown jQuery mobile page라야 합니다.

두번째는 제대로 작동을 하도록 하려면은 full separate page라야 한다는 겁니다.

<a href="#pop.html" data-rel="dialog">Pop up!</a> 

9. A “Cancel” + “Save” button combo


두개의 버튼을 나란히 넣어야 할 때가 있죠? 이럴 경우는 fieldset tag를 쓰시면 편리합니다.

그리고 두개의 버튼을 다른 theme으로 표현할 수도 있습니다.

이 코드는 여기에 있는겁니다. 자주 이용하기 때문에 저같은 경우는 따로 보관해 뒀다가 쓰고 있습니다.

<fieldset>
 <div><button type="submit" data-theme="c">Cancel</button></div>
 <div><button type="submit" data-theme="b">Submit</button></div>
</fieldset>

10. Create a column structure on your own


다양한 디바이스를 위한 single page structure에 대해 위에서 미디어 쿼리와 columns를 사용하는 방법을 위에서 알려 드렸죠.

다행히 웹 개발자들이 컬럼들을 어떻게 사용하는지에 대해 이전에 많이 만들어 놨었습니다. 이 기능들을 미디어쿼리와 같이 섞어쓰면 편하겠죠. 우리는 다양한 스크린사이즈에 맞게 다양한 structure를 쉽게 setup 할 수 있습니다.


Position Is Everything 은 이것을 하는데 가장 쉬운 방법을 알려 줍니다.







반응형


반응형

이 persistence toolbars 는 아래 샘플 예제로 대신합니다.

원레 jQuery Mobile Tutorial 페이지에도 설명은 없고 예제만 있습니다.


Search 란에 텍스트를 입력하면 autocomplete 기능이 적용이 되서 쉽게 Search를 할 수 있게 해 줍니다.


아래 있는 예제는 JQM 튜토리얼 페이지에서 소스를 그냥 긁어온 거라서 깔끔하지는 않습니다.


사용하시려면 깨끗하게 정리하거나 다른곳에서 제대로 된 소스를 받으시면 좋을 거예요.


저는 그냥 jQuery Mobile 공식 튜토리얼을 공부하면서 이런 개념이 있다는 걸 알기 위해서 그리고 그 정보를 이렇게 글로 남기고 나중에 찾아보기 편하도록 하기 위해서 샘플 파일들을 올려 놓습니다.





persistent.html


반응형


반응형

Methods



fixedtoolbar 플러그인은 아래와 같은 메소드들을 가지고 있습니다.


show show the toolbar 

 $("[data-position='fixed']").fixedtoolbar('show');

Note: 이전 버전에서는 아래 신택스로 툴발를 show 하는데 사용했습니다. 하지만 현재는 더이상 지원하지 않고 있습니다.


$.mobile.fixedToolbars
   .show(true);
 
hide hide the toolbar (만약 fullscreen 툴바가 아니라면 static positioning으로 toggle back 할 겁니다. 스크롤에 딸 보일수도 있고 안 보일 수도 있겠죠)

$("[data-position='fixed']").fixedtoolbar('hide'); 
 


toggle toolbar가 visible 일 경우 show와 hide 메소드를 call 합니다.

$("[data-position='fixed']").fixedtoolbar('toggle'); 
 
updatePagePadding . 툴바의 height를 match 시키기 위해 툴바의 page element parent의 패빙을 업데이트 합니다.

$("[data-position='fixed']").fixedtoolbar('updatePagePadding');
		   				

툴바를 re-position 하는 updatelayout event 가 있습니다. 콘텐트를 현재의 페이지에 넣기 위한 다이나믹 어플리케이션을 개발하는 개발자는 이 updatelayout  이벤트를 manually trigger 할 수 있습니다. 그러면 그 페이지의 컴포넌트가 방금 추가된 새로운 콘텐트를 업데이트 하도록 합니다. 이 이벤트는 collapsible, listview filter 플러그인 에서 내부적으로 사용되고 아주 강력합니다. 왜냐하면 어떤 위젯도 이 updatelayout 이벤트를 listen 하도록 할 수 있거든요.


destroy destroy at fixedtoolbar (restore the element to its initial state)

$("[data-position='fixed']").fixedtoolbar('destroy'); 


Events


fixedtoolbar 플러그인에는 아래와 같은 custom 이벤트가 있습니다.

fixed toolbar 가 생성될 때 트리거 생성

$( ".selector" ).fixedtoolbar({
   create: function(event, ui) { ... }
});		
						



반응형


반응형

fixedtoolbar 플러그인에는 다음과 같은 옵션들이 있습니다.


visibleOnPageShow boolean

default: true

이것은 parent page 가 보일 때 이 툴바를 보이게 할지 말지를 결정합니다. 이 옵션은 data-visible-on-page-show="false" 로 사용할 수 있고 아래와 같이 아용할 수도 있습니다.

$("[data-role=header]").fixedtoolbar({ visibleOnPageShow: false });

disablePageZoom boolean

default: true

이것은 사용자가 페이지를 zoom in/out을 할 수 있도록 할지 말지에 대해 컨트롤 합니다.

data-disable-page-zoom="false"  

$("[data-role=header]").fixedtoolbar({ disablePageZoom: false });

transition string

default: "slide" (which ends up using slideup and slidedown)

fixed toolbar를 보이고 숨기고 하는데 사용 될 transition. 여기에 들어갈 수 있는 값들은 none, fade, slide 가 있습니다. (여러분이 직접 만든 CSS 트랜지션을 사용할 수도 있습니다.)

data-transition="fade"

$("[data-role=header]").fixedtoolbar({ transition: "fade" });



fullscreen boolean

default: false

Fullscreen fixed toolbar는 visible 상태라면 항상 content  위에 떠 있게 됩니다. 일반 fixed toolbar와는 다르죠. fullscreen toolbar는 toggle 했을 때 다시 fall back 되지 않습니다. 스크린에서 완전히 사라지지 않는다는 거죠. 이 툴바는 photo viewer 같이 사진으로 전체 화면을 채우거나 할 떄 유용하게 사용하실 수 있습니다. This page로 가시면 구현된 화면을 보실 수가 있습니다. 

data-fullscreen="true"

$("[data-role=header]").fixedtoolbar({ fullscreen: true });

Note:이 data-attribute 신택스는 페이지 element가 아니라 toolbar element 에서 사용하셔야 됩니다.


tapToggle boolean

default: true

유저가 스크린을 Tap 할 때마다 툴바가 토글 기능으로 보였다 안 보였다 하도록 할지 말지를 정해 줌.

data-tap-toggle="true"

$("[data-role=header]").fixedtoolbar({ tapToggle: true });

Note: 이 behavior는 다음과 같이 configuration 할 수 있습니다. 1.1에서는 더이상 이 신택스를 지원하지 않습니다.

	
$.mobile.fixedToolbars
   .setTouchToggleEnabled(false);
 
tapToggleBlacklist string

default: "a, .ui-header-fixed, .ui-footer-fixed"

jQuery selector의 리스트를 tap 했을 때 툴바가 토글되지 않도록 합니다.

$("[data-role=header]").fixedtoolbar({ tapToggleBlacklist: "a, input, select, textarea, .ui-header-fixed, .ui-footer-fixed" });

hideDuringFocus string

default: "input, select, textarea"

 jQuery selector가 선택됐을 때 툴바를 hide 됩니다. fixed toolbar 일 경우는 제외입니다.

$("[data-role=header]").fixedtoolbar({ hideDuringFocus: "input, select, textarea" });

updatePagePadding boolean

default: true

툴바는 담고있는 내용에 따라서 height가 달라질 수 있습니다. 이 옵션은 페이지 엘리먼트의 패딩을 자동적으로 업데이트 해 줍니다. 그럼으로서 툴바는 문서내에서 알맞는 공간을 확보할 수 있게 되는 거죠. enable 상태일 경우에는 여러 경우에 패딩이 업데이트 됩니다. 예를 들어 pageshow, 페이지 전환, resie, orientation change 등등. 툴바의 EM height 에 match 되게 페이지의 div 패딩을 세팅하는 CSS를 추가하고 이 옵션을 disable 하게 되면 여러분 나름대로의 optimization에 유리합니다. .ui-page-header-fixed { padding-top: 4.5em; }.

This option is also exposed as a data attribute: data-update-page-paddinge="false"

$("[data-role=header]").fixedtoolbar({ updatePagePadding: false });

supportBlacklist function

default: function that returns a boolean value

CSS position: fixed 지원은 테스트하기가 아주 어렵습니다. 사실 1.1 버전이 출시 됐을 때 제대로 된 테스트 방법이 알려져 있지 않았습니다. 이 옵션은 position: fixed 관련해서 문제가 있다고 알려진 대중적인 플랫폼의 opt-out을 시도하기 위한 함수입니다. 종종 이 플랫폼들은 부분적으로 position:fixed 를 지원합니다. 전혀 지원하지 않는 것 보다는 낫죠? 이 로직을 여러분의 blacklist 로직에 오버라이드 하려면 initialization 될 때 call 해서 true나 false를 리턴하는 함수를 제공하면 됩니다. 반드시 이것을 mobileinit에 세팅해야 합니다. 그래야 플러그인이 initially created 될 때 apply 됩니다.


$( document ).bind("mobileinit", function(){
  $.mobile.fixedtoolbar.prototype.options.supportBlacklist = function(){
    var result;
    // logic to determine whether result should be true or false
    return result;
  };
})

initSelector CSS selector string

default: ":jqmData(position='fixed')"

이것은 selector를 define 할 때 사용됩니다. (element types, data roles, etc.) 그러면 자동적으로 fixed toolbar로 initialize 되게 됩니다. 어떤 element가 initialized 될지 수정하시려면 이 옵션을 mobileinit event에 바인드 해 주세요.

$( document ).bind( "mobileinit", function(){
	$.mobile.fixedtoolbar.prototype.options.initSelector = ".myselector";
});


반응형

Fixed toolbars

2012. 7. 28. 22:02 | Posted by 솔웅


반응형

Fixed toolbars


CSS position을 지원하는 브라우저(대부분의 데스크탑 브라우저들과 iOS5+ 안드로이드 2.2+, 블랙베리 6 등등)에서는 fixedtoolbar 플러그인을 사용하는 fixed toolbar들은 viewport의 top이나 bottom에 fix 될 겁니다. 그 페이지의 content는 자유롭게 스크롤 되도 그 툴바는 top이나 bottom에 fix 돼 있을 겁니다. fixed positioning을 지원하지 않는 브라우저에서는 같이 따라서 움직일 겁니다.


헤더나 footer에 이 기능을 적용하려면 data-position="fixed" attribute를 jQuery Mobile의 header 나 footer element에 추가하시면 됩니다.


헤더를 fixed 시키는 예제


<div data-role="header" data-position="fixed">
	<h1>Fixed Header!</h1>
</div>		


footer를 Fixed 시키는 예제 :


<div data-role="footer" data-position="fixed">
	<h1>Fixed Footer!</h1>
</div>


Fullscreen Toolbars


Fullscreen fixed toolbars는  visible일 경우 항상 content 위에 위치하게 됩니다. 일반적인 fixed toolbar와는 좀 다르죠. fullscreen toolbar는 toggle 됐을 때 그 위치가 바뀌지 않습니다. 스크린에서 완전히 사라지지가 않죠. Fullscreen toolbar는 photo viewer같이 photo로 전체 스크린이 꽉 차야 되는 그런 인터페이스에 잘 어울리는 기능입니다. 

fixed header나 footer에 이 기능을 사용하시려면 data-fullscreen attribute 를 그 element에 추가하시면 됩니다.


<div data-role="header" data-position="fixed" data-fullscreen="true">
	<h1>Fixed Header!</h1>
</div>


Forms in toolbars


jQuery Mobile 1.1에서는 static toolbar안에서 모든 form element가 제대로 작동하도록 테스트 중에 있습니다. 그러니까 fixed toolbar나 fixed element가 사용되는 어느 곳에서든 form element를 사용하실 때에는 충분히 테스트 해 줄것을 권고합니다. 그래야만 다양한 모바일 브라우저에서 예측할 수 없는 어떤 이슈가 발생하는 것을 줄일 수 있을 겁니다.


Changes in jQuery Mobile 1.1

jQuery Mobile 1.1 버전 이전에는 fixed header 효과를 위해 dynamically re-positioned toolbar를 사용했었습니다. 왜냐하면 아주 일부의 모바일 브라우저에서면 fixed CSS property 를 지원했었거든요. 그리고 유사 fixed 도 fake 자바스크립트 overflow-scrolling behavior를 통해서 지원이 됐었기 때문에 충분히 효과를 내지를 못했습니다. 그래서 특정 플랫폼에서는 아주 자연스럽지 못했었죠. 이런 behavior는 바람직하지 않습니다. 그래서 jQuery Mobile 1.1 에서는 좀 더 폭넓게 지원될 수 있도록 fixed toolbar에 대한 새로운 접근법을 사용했습니다. 이 framework은 다른 많은 대중적인 플랫폼에서 진짜 fixed toolbar를 지원해 줄 것을 원하고 있습니다.


Polyfilling older platforms


fixed toolbar plugin은 CSS position을 지원하지 않는 플랫폼에서 자연스럽게 거기에 맞게 기능을 합니다. iOS4.3 같은 곳에서도 제대로 fixed 되죠. 그 플랫폼에서 show/hide behavior를 포함한 fixed toolbar의 지원이 필요하다면 Filament Group이 개발한 polyfill을 사용하실 수 있습니다.




여러분이 제안할 개선점이 있다면 github의 gist에 그 내용을 올려주세요.

jQuery Mobile을 reference 한 다음에 CSS와 JS 파일들을 include 하세요. 그러면 fixed toolbar가 iOS4.3에서도 jQuery Mobile 1.0 에서와 비슷하게 작동할 겁니다.


Known issue with form controls inside fixed toolbars, and programmatic scroll


iOS5와 몇몇 안드로이드 플랫폼에서는 잘 알려지지 않은 이슈들이 있습니다. 이 이슈들은 fixed-positioned 콘테이너 안에 위치한 form을 컨트롤 할 때 나타나는 현상인데요. 윈도우가 프로그램적으로 스크롤이 될 때 그 hit area를 잃는 경우가 있습니다. (window.scrollTo 같은 기능을 사용할 때). 이건 jQuery Mobile의 이슈는 아니지만 그것 때문에 jQuery Mobile 기능이 제대로 작동하지 않는 경우가 있습니다. 그러니까 될 수 있는대로 jQuery Mobile fixed toolbar 안에 form control을 사용할 떄는 프로그램적으로 스크롤을 하지 말 것을 권고 드립니다. Device Bugs project tracker의 This ticket이  이 문제에 대해 보다 자세히 설명을 하고 있습니다.


Known issues in Android 2.2/2.3


안드로이드 2.2와 2.3의  implementation of position: fixed; 는 styles와 markup 패턴들과 관련되지 않은 conjunction 이 될 수도 있습니다. 왜냐하면 여러 이상한 에러들이 있거든요. 특히 position: fixed element 내의 absolute element 같은 포지션일 경우 그렇습니다. 저희는 라이브러리의 범위내에서 발생하는 이런 버그들을 제대로 고치려고 노력을 하고 있습니다. 하지만 custom styles에서는 여러 이슈들을 유발할 수 있습니다.


  • 다른곳에 있는 Form element들은 (특히 select 메뉴 같은 것) fixed position안에 위치한 empty absolute position 으로 세팅됐을 때 user와의 interaction이 fail 날 수 있습니다. 드물지만 (대개 안드로이드 2.2에서 일어나는데) 이런 경우 그 부분에서만 fail이 일어나는게 아니라 전체 페이지의 모든 기능에서 fail이 일어나기도 합니다. 이런 경우 absolute position 된 element들에 아무 character라도 add 해서 (non-breaking space나 어떤 경우엔 그냥 whitespace를 추가해도) 해결 할 수는 있습니다.

  • 위에 언급된 이슈는 fixed position element 내의 absolute position된 이미지의 경우에도 발생할 수 있습니다. 대개 그 이미지의 inherent dimensions과 관련해서 에러가 발생합니다. CSS를 이용해서 height와 width 가 정해 진다거나 image src 가 invalid (그래서 inherent height와 width 가 없는) 경우 이러한 일이 발생합니다. 예를 들어 그 이미지가 50X50이고 fixed element로 위치가 정해졌고 그 inherent dimension을 그대로 사용할 때 이러한 현상은 일어나지 ㅇ낳습니다.

  • position: fixed element가 페이지의 어느곳에서든 나타날 때 대부분의 2D CSS transform은 fail 될 겁니다. 특이하게 오직 translate transform 만 이 경우에 해당되지 않는 것 같습니다. 더 특이한 점은 이 이슈는 CSS opacity를 9나 그 이하로 세팅하면 해결된다는 겁니다.

  • position: fixed 와 overflow 프로퍼티의 조합은 가장 피해야 할 상황입니다. 이 두 기능은 Android OS의 구 버전에서 예측하지 못하는 이슈들을 야기하기 때문입니다.

  • position:fixed element 내에 위치해서 on-screen keyboard를 불러오는 element들은 default keyboard를 사용하지 않고 다른 것을 사용할 때 user input 기능이 fail 됩니다 .Swype, XT9 등도 여기에 해당됩니다.


저희들은 이 버그들을 해결하기 위해 지속적으로 노력하고 있습니다. 우리는 모든 안드로이드 native browser에서 충분한 테스트를 거치지 않고 복잡한 user styles과 form element를 포함하고 있는 fixed toolbar들을 implementing 하지 말것을 권고드립니다 .

다음과 같은 페이지들은 fixed toolbar와 form element들과 관련해서 테스트를 한 페이지들 입니다. : demo app, text inputs, search inputs, radio toggles, checkbox toggles, slider, select, and buttons.


No longer supported: touchOverflowEnabled

이전버전인 jQuery Mobile 1.1에서 지원했던 true fixed toolbar는 CSS 프로퍼티인 overflow-scrolling:touch에 대해 native browser가 지원하는지에 대한 contingent 였습니다. 지금은 이 기능이 iOS5에서만 지원이 되고 있죠. 이 CSS 프로퍼티는 더 이상 사용되지 않습니다. 우리는 프레임워크에서 이 프로퍼티의 모든 internal usage를 없앴습니다. 하지만 이미 이 기능을 사용하고 있는 어플리케이션에서 문제가 발생하지 않도록 $.mobile 객체에 global 한 정의는 남겨 뒀습니다. 이 프로퍼티는 removal로 flag 되 있습니다. 그러니 더 이상 이 코드를 사용하지 않도록 업데이트 해 주세요. 이 프로퍼티의 support test는 $.support 하에서 그 정의가 남아 있고요 아직까지는 이 기능을 remove 할 계획은 없습니다.



The rest of the page is just sample content to make the page very long

Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Vestibulum tortor quam, feugiat vitae, ultricies eget, tempor sit amet, ante. Donec eu libero sit amet quam egestas semper. Aenean ultricies mi vitae est. Mauris placerat eleifend leo. Quisque sit amet est et sapien ullamcorper pharetra. Vestibulum erat wisi, condimentum sed, commodo vitae, ornare sit amet, wisi. Aenean fermentum, elit eget tincidunt condimentum, eros ipsum rutrum orci, sagittis tempus lacus enim ac dui.Donec non enim in turpis pulvinar facilisis. Ut felis.

Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Vestibulum tortor quam, feugiat vitae, ultricies eget, tempor sit amet, ante. Donec eu libero sit amet quam egestas semper. Aenean ultricies mi vitae est. Mauris placerat eleifend leo. Quisque sit amet est et sapien ullamcorper pharetra. Vestibulum erat wisi, condimentum sed, commodo vitae, ornare sit amet, wisi. Aenean fermentum, elit eget tincidunt condimentum, eros ipsum rutrum orci, sagittis tempus lacus enim ac dui.Donec non enim in turpis pulvinar facilisis. Ut felis.

And an inset list




Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Vestibulum tortor quam, feugiat vitae, ultricies eget, tempor sit amet, ante. Donec eu libero sit amet quam egestas semper. Aenean ultricies mi vitae est. Mauris placerat eleifend leo. Quisque sit amet est et sapien ullamcorper pharetra. Vestibulum erat wisi, condimentum sed, commodo vitae, ornare sit amet, wisi. Aenean fermentum, elit eget tincidunt condimentum, eros ipsum rutrum orci, sagittis tempus lacus enim ac dui.Donec non enim in turpis pulvinar facilisis. Ut felis.

Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Vestibulum tortor quam, feugiat vitae, ultricies eget, tempor sit amet, ante. Donec eu libero sit amet quam egestas semper. Aenean ultricies mi vitae est. Mauris placerat eleifend leo. Quisque sit amet est et sapien ullamcorper pharetra. Vestibulum erat wisi, condimentum sed, commodo vitae, ornare sit amet, wisi. Aenean fermentum, elit eget tincidunt condimentum, eros ipsum rutrum orci, sagittis tempus lacus enim ac dui.Donec non enim in turpis pulvinar facilisis. Ut felis.

Embedded form





A bit more text

Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Vestibulum tortor quam, feugiat vitae, ultricies eget, tempor sit amet, ante. Donec eu libero sit amet quam egestas semper. Aenean ultricies mi vitae est. Mauris placerat eleifend leo. Quisque sit amet est et sapien ullamcorper pharetra. Vestibulum erat wisi, condimentum sed, commodo vitae, ornare sit amet, wisi. Aenean fermentum, elit eget tincidunt condimentum, eros ipsum rutrum orci, sagittis tempus lacus enim ac dui.Donec non enim in turpis pulvinar facilisis. Ut felis.


-----------

위에 내용도 번역하려고 보니까 이게 영어가 아니네요.

왜 갑자기 이게 영어가 아닌걸로 변했는지.. 아니면 원래 저랬는지 몰겠지만.. 조금 황당...

원래 jQuery Mobile 웹사이트를 가도 이렇게 돼 있더라구요.

보니까 제목이 The rest of the page is just sample content to make the page very long 네요.

이 페이지의 나머지 부분은 그냥 페이지를 길게 만들려고 넣은 샘플 내용이라고 하네요.

이게 왜 있는지 좀 이상.... 잠깐 당황했음...

반응형