แสดงบทความที่มีป้ายกำกับ javascript แสดงบทความทั้งหมด
แสดงบทความที่มีป้ายกำกับ javascript แสดงบทความทั้งหมด

วันอังคารที่ 8 ตุลาคม พ.ศ. 2556

How to comment to Document with JavaScript in Alfresco

ในบางกรณี เราอาจจำเป็นต้องใช้ JavaScript เพื่อไป Comment เอกสารแต่การที่จะ Comment เอกสารนั้นด้วย JavaScript API ของ Alfresco นั้นไม่ง่ายเลย ผมจึงทำ Function สำหรับ Comment ไปยัง node ของเอกสารไว้เพื่อง่ายต่อการใช้งานภายหลัง
function commentNode(nodeRef, comment) {
   var node = search.findNode(nodeRef);

   if(!node.hasAspect("fm:discussable")) {
      node.addAspect("fm:discussable");
   }
   if(!node.hasAspect("fm:commentsRollup")) {
      node.addAspect("fm:commentsRollup");
   }

   var forums = node.childAssocs["fm:discussion"];
   var forum;
   if(forums.length === 0) {
     forum = node.createNode(node.properties.name + " discussion", "fm:forum", "fm:discussion");
   } else {
     forum = forums[0];
   }

   var topics = forum.childAssocs["cm:contains"];
   var topic;
   if(topics == null || topics.length === 0) {
     topic = forum.createNode("Comments", "fm:topic", [], "cm:contains", "cm:Comments");
   } else {
     topic = topics[0];
   }

   var now = new Date();
   var name = "comment-" + now.getTime();
   var mypost = topic.createNode(name, "fm:post", [], "cm:contains", name);

   mypost.content = comment;
}
ตัว Function จะรับ NodeRef และ CommentText ไปจากนั้นนำ NodeRef ไปหา Node จริง จากนั้น check ว่า Node นั้นมี Aspect discussable กับ commentRollup หรือไม่ โดยหากไม่มีจะใส่ Aspect ให้

จากนั้นตรวจสอบว่ามีการทำ Child Association กับตัว discussion และตัว contains ไว้หรือยัง โดยหากยังก็ให้ Create Child Association ด้วย จากนั้นก็ add comment ลงไปครับ
Continue Reading...

วันศุกร์ที่ 7 มกราคม พ.ศ. 2554

ใช้งาน cookie บน javascript กับภาษาไทย

เผอิญได้โจทย์มาว่าใน contact form user นั้นควรกรอกแค่ครั้งเดียว ครั้งต่อไปเข้ามาหน้า contact ก็ไม่ควรต้องกรอกอีก ซึ่งผู้ที่จะกรอกนั้นจะเป็น anonymous ดังนั้นวิธีการที่จะทำให้หน้า contact จำค่าได้ก็คงต้องใช้ cookie

ปัญหาคือหน้า contact form นั้นอยู่ใน drupal ซึ่งเมื่อเปิด page cache แล้วมันจะทำให้ใช้งาน cookie สำหรับ anonymous ไม่ได้ ดังนั้นเลยต้องเลี่ยงไปใช้ cookie ของ javascript แทน

จาก tutorial http://www.w3schools.com/JS/js_cookies.asp ก็ดูเหมือนจะทำงานได้ดีแต่พอเรานำไปใช้จริงและกรอกค่าใน form เป็นภาษาไทย ผลลัพธ์ก็คือ ภาษาไทยเละ ดังนั้นเราจึงต้อง customize code กันนิดหน่อยเพื่อให้ใช้งานภาษาไทยได้

original code

function getCookie(c_name) {
  if (document.cookie.length > 0) {
    c_start = document.cookie.indexOf(c_name + "=");
    if (c_start != -1) {
      c_start = c_start + c_name.length+1;
      c_end = document.cookie.indexOf(";", c_start);
      if (c_end == -1) 
        c_end = document.cookie.length
      return unescape(document.cookie.substring(c_start,c_end));
    }
  }
  return "";
}

function setCookie(c_name, value,expiredays) {
  var exdate = new Date();
  exdate.setDate(exdate.getDate()+expiredays);
  document.cookie = c_name+ "=" +escape(value)+((expiredays==null) ? "" : ";expires="+exdate.toUTCString());
}

customized code

function getCookie(c_name) {
  if (document.cookie.length > 0) {
    c_start = document.cookie.indexOf(c_name + "=");
    if (c_start != -1) {
      c_start = c_start + c_name.length+1;
      c_end = document.cookie.indexOf(";", c_start);
      if (c_end == -1) 
        c_end = document.cookie.length
      return decodeURIComponent(document.cookie.substring(c_start,c_end));
    }
  }
  return "";
}

function setCookie(c_name, value,expiredays) {
  var exdate = new Date();
  exdate.setDate(exdate.getDate()+expiredays);
  document.cookie = c_name+ "=" +encodeURIComponent(value)+((expiredays==null) ? "" : ";expires="+exdate.toUTCString());
}

เพื่อให้ใช้งานภาษาไทยได้ ต้องใช้ function encodeURIComponent แทน function escape แต่ปัญหายังไม่หมดแค่นี้ เมื่อเรา getCookie ที่ภายใน text นั้นมี space เข้ามาใช้งาน space ที่เคยพิมพ์เข้าไปจะกลายเป็นเครื่องหมาย + แทน ดังนั้นเราต้อง replace มันก่อนที่จะนำไปใช้งานด้วย

getCookie('c_name').replace(/\+/g, " ")

ซึ่ง /\+/ นั้นหมายถึงเครื่องหมาย + และ g หมายถึงให้ replace ทั้ง string
Continue Reading...

วันพฤหัสบดีที่ 7 มกราคม พ.ศ. 2553

basic html and js

ได้กลับมาเขียน html 1 หน้าทำให้รู้สึกว่า เมื่อไม่ได้เขียนมันนานๆ ต้องเปิด reference ตลอดเลยเรา ก็พอเขียนไปได้เรื่อยๆ จนถึงขั้นตอนการทำ js ดึงค่าจากไฟล์ มาใส่ใน dropdown ใน html ขั้นตอนนี้เสียเวลานานมาก เพราะ search มาเจอ solution ต่างกันทำให้สับสนมากจนอยากเขียนเก็บไว้เอง

output ที่ต้องการนั้นคือ เมื่อ load html แล้วต้องการให้รายชื่อทั้งหมด add ลงไปใน dropdown ใน html ที่ load ขึ้นมา ขั้นแรกก็ต้องใส่ function onload ที่ body ซะก่อนคือ

<body onload="additem();">

ต่อมาก็ต้องสร้าง dropdown โดยเราต้องกำหนด id ให้มันด้วยเนื่องจากจะได้ระบุได้ว่าจะเอา output จากไฟล์ไปใส่ที่ใด

<select id="myitem"></select>

ขั้นต่อไปก็ต้องไปสร้าง javascript function ที่ชื่อว่า additem() ดังนี้ครับ
function additem(){
var ajax;
try{
  // Opera 8.0+, Firefox, Safari
  ajax = new XMLHttpRequest();
} catch (e){
  // Internet Explorer Browsers
  try{
    ajax = new ActiveXObject("Msxml2.XMLHTTP");
  } catch (e) {
    try{
      ajax = new ActiveXObject("Microsoft.XMLHTTP");
    } catch (e){
      // Something went wrong
      alert("Your browser broke!");
      return false;
    }
  }
}

ajax.onreadystatechange = function(){
  if (ajax.readyState == 4) {
    document.getElementById('myitem').innerHTML = ajax.responseText;
  }
}
ajax.open("GET", "item.html", true);
ajax.send(null); 
}

ซึ่งไฟล์ของเราที่ชื่อ item.html นั้นมีข้อมูลดังนี้

<option>item1</option>
<option>item2</option>
<option>item3</option>

สรุปคือเมื่อ load page นี้ขึ้นมาแล้วจะทำการ add option ต่างๆ จากไฟล์ item.html ไปใส่ที่ select id="myitem" ครับซึ่งก็จะได้ dropdown ที่มีค่า item1, item2, item3 ตามลำดับคร้าบ
Continue Reading...

Blogroll

About