// 비주얼스튜디오 > 도구 > NuGet패키지관리자 > 솔류션용 NuGet패키지관리 > VideoLibrary 검색 설치 (프레임웍:4.7.2, VideoLibrary:3.1.9)
using System;
using System.IO;
using System.Threading;
using System.Windows.Forms;
using VideoLibrary;
using System.Net;
namespace WindowsFormsApp3
{
public partial class Form1 : Form
{
char[] invalidChars = System.IO.Path.GetInvalidFileNameChars(); // 허용하지 않는 파일명을 찾기위해
public Form1()
{
InitializeComponent();
//cbbDownType.Items.Clear();
//cbbDownType.DisplayMember = "Text";
//cbbDownType.ValueMember = "Value";
//cbbDownType.Items.Add(new { Text = "MP4 And MP3", Value = "0" });
//cbbDownType.Items.Add(new { Text = "Only MP4", Value = "1" });
//cbbDownType.Items.Add(new { Text = "Only MP3", Value = "2" });
//cbbDownType.SelectedIndex = 0;
}
private void btnFolderSelect_Click(object sender, EventArgs e)
{
//folderDialog.ShowDialog();
}
private void button1_Click(object sender, EventArgs e)
{
string strUrl = "https://youtu.be/s3MiZJy4PLg?feature=shared";
//string strType = (cbbDownType.SelectedItem as dynamic).Value;
//if (string.IsNullOrEmpty(folderDialog.SelectedPath))
//{
// folderDialog.ShowDialog();
//}
//if (string.IsNullOrEmpty(folderDialog.SelectedPath) == false)
//{
// Thread trd = new Thread(() => YouTobeDown(strUrl, folderDialog.SelectedPath, strType));
// trd.Start();
//}
Thread trd = new Thread(() => YouTobeDown(strUrl, @"C:\Users\saengyeol_chun2\Desktop", ""));
trd.Start();
}
private async void YouTobeDown(string strUrl, string strSavePath, string strType)
{
try
{
WebRequest GetTitle = HttpWebRequest.Create(strUrl);
YouTube youtube = YouTube.Default;
YouTubeVideo video = await youtube.GetVideoAsync(strUrl);
string fileNm = "1111";
File.WriteAllBytes(strSavePath + @"\" + fileNm + ".mp4", await video.GetBytesAsync());
}
catch (Exception ex)
{
//throw;
}
//if (strType == "0" || strType == "2")
//{
//}
}
}
}
삽질 이제 그만!!
2025년 2월 5일 수요일
유튜브-변환
변환
// 비주얼스튜디오 > 도구 > NuGet패키지관리자 > 솔류션용 NuGet패키지관리 > HtmlAgilityPack 검색해서 설치
using HtmlAgilityPack;
using System;
using System.Drawing;
using System.IO;
using System.Windows.Forms;
namespace WindowsFormsApp2
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
imgBas64Test001();
}
private void button2_Click(object sender, EventArgs e)
{
imgBas64Test002();
}
private void button3_Click(object sender, EventArgs e)
{
string strUrl = "http://kiken.kolon.com/Upload_Approval10/LS/Doc/2025/323/00000000000031540323.mht";
Uri url = new Uri(strUrl);
System.Net.WebClient wClient = new System.Net.WebClient();
string strMhtData = wClient.DownloadString(url);
ClsResult cRslt = getBoundaryText(ref strMhtData);
if (cRslt.bSucc)
{
ClsHtmlDoc htmlRslt = mhtToHtml(ref strMhtData, cRslt.sResult,true); // htmlDocument정보와 결과 정보를 가지고 있음
if (htmlRslt.cRslt.bSucc)
{
htmlRslt.htmlDoc.Save(@"C:\Users\saengyeol_chun2\Desktop\111.html");
}
}
else
{
MessageBox.Show(cRslt.sResult);
}
}
private void button4_Click(object sender, EventArgs e)
{
string strFlNm = @"C:\Users\saengyeol_chun2\Desktop\새 폴더\00000000000021838552.mht";
StreamReader RS = new StreamReader(strFlNm);
string strMhtData = RS.ReadToEnd();
RS.Close();
ClsResult cRslt = getBoundaryText(ref strMhtData);
if (cRslt.bSucc)
{
ClsHtmlDoc htmlRslt = mhtToHtml(ref strMhtData, cRslt.sResult, true); // htmlDocument정보와 결과 정보를 가지고 있음
if (htmlRslt.cRslt.bSucc)
{
htmlRslt.htmlDoc.Save(@"C:\Users\saengyeol_chun2\Desktop\222.html");
}
}
else
{
MessageBox.Show(cRslt.sResult);
}
}
private ClsResult getBoundaryText(ref string strMht)
{
ClsResult cRslt = new ClsResult();
int nStarPos = strMht.IndexOf("boundary=");
if (nStarPos > 0)
{
int nEndPos = strMht.IndexOf("\"", nStarPos + 10);
string strMsg = "--" + strMht.Substring(nStarPos + 10, nEndPos - nStarPos - 10);
cRslt.setResult(true, strMsg, "");
}
else
{
cRslt.setResult(false, "기준점 boundary를 찾을수 없습니다.", "");
}
return cRslt;
}
private ClsHtmlDoc mhtToHtml(ref string strMht, string strBoundary, bool isUtf8)
{
string [] arrMht = strMht.Split(new string[] { strBoundary }, StringSplitOptions.None);
string strErr = string.Empty;
ClsHtmlDoc cHtmlRslt = new ClsHtmlDoc();
HtmlAgilityPack.HtmlDocument htmlDoc = new HtmlAgilityPack.HtmlDocument();
if (arrMht.Length < 2)
{
cHtmlRslt.setHtmlDoc("본문의 boundary를 찾을수 없습니다.", "");
return cHtmlRslt;
}
else
{
try
{
//arrMht[1].Split(new string[] { Environment.NewLine + Environment.NewLine }, StringSplitOptions.None)[1].Trim();
string tmpItm = arrMht[1].Split(new string[] { "\n\n" }, StringSplitOptions.None)[1].Trim();
int nCnt = tmpItm.IndexOf("\n") + 1;
string strItm = tmpItm.Substring(nCnt).Trim();
byte[] arrHtml = Convert.FromBase64String(strItm);
string strHtml = string.Empty;
if (isUtf8)
{
strHtml = System.Text.Encoding.UTF8.GetString(arrHtml);
}
else
{
strHtml = System.Text.Encoding.GetEncoding("ks_c_5601-1987").GetString(arrHtml);
}
htmlDoc.LoadHtml(strHtml);
}
catch (Exception)
{
cHtmlRslt.setHtmlDoc("본문 변환에 실패하였습니다.", "");
return cHtmlRslt;
}
}
int nIdx = 1;
HtmlNodeCollection hnc = htmlDoc.DocumentNode.SelectNodes("//img");
ClsResult cRslt = new ClsResult(true); // 이미지가 하나도 없는 경우가 있어 성공에서 시작
foreach (HtmlNode hNode in hnc)
{
cRslt = GetImage(hNode, ref arrMht, nIdx);
if (cRslt.bSucc)
{
hNode.SetAttributeValue("src", cRslt.sResult);
}
else
{
break;
}
nIdx++;
}
cHtmlRslt.setHtmlDoc(htmlDoc, cRslt);
return cHtmlRslt;
}
private ClsResult GetHtml(string strMht, string strBoundary, bool isUtf8)
{
ClsResult cRslt = new ClsResult();
try
{
string strItm = strMht.Split(new string[] { "\n\n" }, StringSplitOptions.None)[1].Trim();
byte[] arrHtml = Convert.FromBase64String(strItm);
string strHtml = string.Empty;
if (isUtf8)
{
strHtml = System.Text.Encoding.UTF8.GetString(arrHtml);
}
else
{
strHtml = System.Text.Encoding.GetEncoding("ks_c_5601-1987").GetString(arrHtml);
}
cRslt.setResult(true, strHtml, "");
}
catch (Exception ex)
{
cRslt.setResult(false, ex.Message, "");
}
return cRslt;
}
private ClsResult GetImage(HtmlNode hNode, ref string[] arrMht, int nCnt)
{
ClsResult cRslt = new ClsResult();
string strAttr = hNode.GetAttributeValue("src", "");
if (string.IsNullOrWhiteSpace(strAttr))
{
cRslt.setResult(false, string.Format("{0}번째 src 속성 값이 없습니다.", nCnt), "");
}
else
{
try
{
for (int idx = 2; idx < arrMht.Length; idx++)
{
if (arrMht[idx].IndexOf(strAttr) > -1)
{
string strItm = "data:image/png;charset=utf-8;base64," + arrMht[idx].Trim().Split(new string[] { "\n\n" }, StringSplitOptions.None)[1].Trim();
cRslt.setResult(true, strItm, "");
}
}
}
catch (Exception ex)
{
cRslt.setResult(false, string.Format("{0}번째 이미지 찾는중 오류 발생 : {1}", nCnt, ex.Message), "");
}
}
if (cRslt.sResult == string.Empty)
{
cRslt.setResult(false, string.Format("{0}번째 src 속성[{1}] 동일한 이미지 찾기에 실패하였습니다.", nCnt, strAttr), "");
}
return cRslt;
}
private void imgBas64Test001()
{
string flNm = @"C:\Users\saengyeol_chun2\Desktop\처리모음\캡처.PNG";
string strHtml = @"
![]()
";
WebBrowser browser = new WebBrowser();
browser.ScriptErrorsSuppressed = true;
browser.DocumentText = strHtml;
browser.Document.Write(strHtml);
System.Windows.Forms.HtmlDocument htmlDoc = browser.Document;
HtmlElementCollection imgRows = htmlDoc.GetElementsByTagName("img");
foreach (HtmlElement imgElement in imgRows)
{
string tmpSrc = imgElement.GetAttribute("src");
if (string.IsNullOrWhiteSpace(tmpSrc) == false)
{
string strSrc = "data:image/png;charset=utf-8;base64," + GetStringFromImageFile(flNm); // 이미지를 Base64로 변환
imgElement.SetAttribute("src", strSrc);
}
}
string outHtml = htmlDoc.Body.InnerHtml;
}
private void imgBas64Test002()
{
string flNm = @"C:\Users\saengyeol_chun2\Desktop\처리모음\캡처.PNG";
string strHtml = @"
![]()
";
HtmlAgilityPack.HtmlDocument htmlDoc = new HtmlAgilityPack.HtmlDocument();
htmlDoc.LoadHtml(strHtml);
HtmlNodeCollection imgRows = htmlDoc.DocumentNode.SelectNodes("//img");
foreach (HtmlNode imgElement in imgRows)
{
string tmpSrc = imgElement.GetAttributeValue("src", "");
if (string.IsNullOrWhiteSpace(tmpSrc) == false)
{
string strSrc = "data:image/png;charset=utf-8;base64," + GetStringFromImageFile(flNm); // 이미지를 Base64로 변환
imgElement.SetAttributeValue("src", strSrc);
}
}
string outHtml = htmlDoc.DocumentNode.InnerHtml;
}
private string GetStringFromImageFile(string filename)
{
string base64Image = "";
Image img = System.Drawing.Image.FromFile(filename);
MemoryStream mstream = new MemoryStream();
img.Save(mstream, img.RawFormat);
byte[] imgBytes = mstream.ToArray();
base64Image = Convert.ToBase64String(imgBytes);
return base64Image;
}
}
public class ClsHtmlDoc
{
public HtmlAgilityPack.HtmlDocument htmlDoc;
public ClsResult cRslt;
///
/// 성공시 호출
///
///
public void setHtmlDoc(HtmlAgilityPack.HtmlDocument htmlDocument)
{
cRslt = new ClsResult();
htmlDoc = htmlDocument;
cRslt.bSucc = true;
}
///
/// 실패시 호출
///
///
///
public void setHtmlDoc(ClsResult clsRslt)
{
cRslt = clsRslt;
}
///
/// 실패시 호출 (메세지와, 코드는 직접 입력)
///
///
///
public void setHtmlDoc(string strResult, string strCode)
{
cRslt = new ClsResult();
cRslt.sResult = strResult;
cRslt.sCode = strCode;
}
public void setHtmlDoc(HtmlAgilityPack.HtmlDocument htmlDocument, ClsResult clsRslt)
{
htmlDoc = htmlDocument;
cRslt = new ClsResult();
}
}
public class ClsResult
{
public bool bSucc = false;
public string sResult = string.Empty;
public string sCode = string.Empty;
//public string sEtc1 = string.Empty;
//public string sEtc2 = string.Empty;
public ClsResult()
{
}
public ClsResult(bool isSucc)
{
bSucc = isSucc;
}
public void setResult(bool isSucc, string strMsg, string strCode)
{
bSucc = isSucc;
sResult = strMsg;
sCode = strCode;
}
/*
public void setResult(bool isSucc, string strMsg, string strCode, string strEtc1)
{
bSucc = isSucc;
sResult = strMsg;
sCode = strCode;
sEtc1 = strEtc1;
}
public void setResult(bool isSucc, string strMsg, string strCode, string strEtc1, string strEtc2)
{
bSucc = isSucc;
sResult = strMsg;
sCode = strCode;
sEtc1 = strEtc1;
sEtc2 = strEtc2;
}
*/
}
}
2017년 11월 8일 수요일
2017년 2월 13일 월요일
기본적인 유효성 검사 및 태그 틀 layerMsg 및 focus
---------------- 코드 실행 시작---------------------------------------------------------------
| 1-1항목 | 1-2항목 | 숫자만 | ||
|---|---|---|---|---|
| 2-1항목 | 2-2항목 | 숫자+콤마 | ||
| 3-1항목 | 3-2항목 | 숫자+장선(-) | ||
| 4-1항목 | 4-2항목 | 숫자+점(.) |
---------------- 코드 실행 종료---------------------------------------------------------------
<!DOCTYPE html><html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title></title>
<style type="text/css">
.layer-main {
z-index:2000;
display:none;
position: fixed;
left: 0;
right: 0;
top: 0;
bottom: 0;
text-align: center;
background-color: rgba(0, 0, 0, 0.5);
}
.layer-main:before {
content: "";
display: inline-block;
height: 100%;
vertical-align: middle;
margin-right: -.25em;
}
.layer-popup {
display: inline-block;
vertical-align: middle;
background-color: #fff;
border: 1px solid #3571B5;
z-index: 10;
font-family:Tahoma;
}
.layer-popup .layer-container {
padding-bottom: 20px;
}
.layer-title {
overflow:hidden;
margin:0px;
padding:0px;
background-color: #474747;
height:36px;
}
.layerTitle {
float:left;
line-height:36px;
margin:0px;
padding:0px 0px 0px 10px;
font-size:15px;
color:#ffffff;
}
.layer-close {
float:right;
margin:0px;
padding:8px 10px;
cursor:pointer;
}
.layerConts {
clear:both;
margin-top:10px;
padding: 10px;
}
</style>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"></script>
<script type="text/javascript">
$(document).ready(function (){
$("[d-valid='ValidNumber']").each(function (){
// 익스 플로러 10버전 이상 및 (크롬 사파리 포함) 지원하면 keydown 이벤트를 input 이벤트로 데체 하면 좋음!!!!
$(this).on("keydown", function () {kdNumber(this);});
$(this).on("keyup", function () {kuNumber(this);});
});
$("[d-valid='ValidNumComma']").each(function (){
$(this).on("keydown", function () {kdNumComma(this);});
$(this).on("keyup", function () {kuNumComma(this);});
$(this).on("blur", function () {kbNumComma(this);});
});
$("[d-valid='ValidNumMinus']").each(function (){
$(this).on("keydown", function () {kdNumMinus(this);});
$(this).on("keyup", function () {kuNumMinus(this);});
});
$("[d-valid='ValidNumDot']").each(function (){
$(this).on("keydown", function () {kdNumDot(this);});
$(this).on("keyup", function () {kuNumDot(this);});
});
});
/* -- prototype -------------------------------------------------------------------------------------------------------------------*/
String.prototype.DelComma = function () {
return this.replace( /,/g, "");
}
String.prototype.AddComma = function () {
return this.replace(/[^0-9]/g , "").replace(/\B(?=(\d{3})+(?!\d))/g, ",");
}
/* -- replace후 커서위치 유지 -------------------------------------------------------------------------------------------------------------------*/
function CurserSet(Obj, selLen) {
if (Obj.setSelectionRange) { Obj.focus(); Obj.setSelectionRange(selLen, selLen); } /* WebKit */
else if (Obj.createTextRange) { var range = Obj.createTextRange(); range.collapse(true); range.moveEnd('character', selLen); range.moveStart('character', selLen); range.select(); } /* IE */
else if (Obj.selectionStart) { Obj.selectionStart = selLen; Obj.selectionEnd = selLen; }
}
/* -- 숫자만 -------------------------------------------------------------------------------------------------------------------*/
function ValidNumber(Obj) {
var jObj = $(Obj);
var val = jObj.val();
var required = jObj.attr("d-required");
if(required.toLowerCase() != "true" && val == ""){
return true;
}
var msg = jObj.attr("d-msg");
if(jObj.attr("d-required") == "true" && val == "" ){
if(jObj.val() == ""){
msgShow(Obj, msg + " 항목 값을 입력해주세요.");
}
else{
msgShow(Obj, msg + " 항목 입력값을 확인하여 주세요.");
}
}
else{
var ext = /[^0-9]/g;
if(ext.test(val)){
msgShow(Obj, msg + " 항목 입력값을 확인하여 주세요.");
}
else{
return true;
}
}
jObj.focus();
return false;
}
function kuNumber(Obj) {
var selLen = Obj.selectionStart;
var oVal = $(Obj).val();
var tVal = oVal.replace(/[^0-9]/g , "");
if (oVal != tVal) {
$(Obj).val(tVal);
CurserSet(Obj, selLen + tVal.length - oVal.length);
}
}
function kdNumber(Obj) {
var eKey = event.keyCode;
if (((eKey >= 48 && eKey <= 57) || (eKey >= 96 && eKey <= 105) || eKey == 8 || eKey == 46 || eKey == 37 || eKey == 39 || eKey == 9) && (event.shiftKey == false)) {
}
else {
(event.preventDefault) ? event.preventDefault() : event.returnValue = false;
}
}
/* -- 숫자+콤마(,) -------------------------------------------------------------------------------------------------------------------*/
function ValidNumComma(Obj) {
var jObj = $(Obj);
var val = jObj.val();
var required = jObj.attr("d-required");
if(required.toLowerCase() != "true" && val == ""){
return true;
}
val = val.DelComma();
var msg = jObj.attr("d-msg");
if(jObj.attr("d-required") == "true" && val == "" ){
if(jObj.val() == ""){
msgShow(Obj, msg + " 항목 값을 입력해주세요.");
}
else{
msgShow(Obj, msg + " 항목 입력값을 확인하여 주세요.");
}
}
else{
var ext = /[^0-9]/g;
if(ext.test(val)){
msgShow(Obj, msg + " 항목 입력값을 확인하여 주세요.");
}
else{
return true;
}
}
jObj.focus();
return false;
}
function kuNumComma(Obj) {
var selLen = Obj.selectionStart;
var oVal = $(Obj).val();
var tVal = oVal.replace(/[^,0-9]/g , "");
if (oVal != tVal) {
$(Obj).val(tVal);
CurserSet(Obj, selLen + tVal.length - oVal.length);
}
}
function kdNumComma(Obj) {
var eKey = event.keyCode;
if (((eKey >= 48 && eKey <= 57) || (eKey >= 96 && eKey <= 105) || eKey == 8 || eKey == 188 || eKey == 46 || eKey == 37 || eKey == 39 || eKey == 9) && (event.shiftKey == false)) {
}
else {
(event.preventDefault) ? event.preventDefault() : event.returnValue = false;
}
}
function kbNumComma(Obj) {
var tval = $(Obj).val().AddComma();
$(Obj).val(tval);
}
function AddComma(Obj) {
$(Obj).val($(Obj).val().AddComma());
}
function DelComma(Obj) {
$(Obj).val($(Obj).val().DelComma());
}
/* -- 숫자+장선(-) -------------------------------------------------------------------------------------------------------------------*/
function ValidNumMinus(Obj) {
var jObj = $(Obj);
var val = jObj.val();
var required = jObj.attr("d-required");
if(required.toLowerCase() != "true" && val == ""){
return true;
}
val = val.replace( /-/g, "");
var msg = jObj.attr("d-msg");
if(jObj.attr("d-required") == "true" && val == "" ){
if(jObj.val() == ""){
msgShow(Obj, msg + " 항목 값을 입력해주세요.");
}
else{
msgShow(Obj, msg + " 항목 입력값을 확인하여 주세요.");
}
}
else{
var ext = /[^0-9]/g;
if(ext.test(val)){
msgShow(Obj, msg + " 항목 입력값을 확인하여 주세요.");
}
else{
return true;
}
}
jObj.focus();
return false;
}
function kuNumMinus(Obj) {
var selLen = Obj.selectionStart;
var oVal = $(Obj).val();
var tVal = oVal.replace(/[^-0-9]/g , "");
if (oVal != tVal) {
$(Obj).val(tVal);
CurserSet(Obj, selLen + tVal.length - oVal.length);
}
}
function kdNumMinus(Obj) {
var eKey = event.keyCode;
if (((eKey >= 48 && eKey <= 57) || (eKey >= 96 && eKey <= 105) || (eKey == 189 || eKey == 109) || eKey == 8 || eKey == 46 || eKey == 37 || eKey == 39 || eKey == 9) && (event.shiftKey == false)) {
}
else {
(event.preventDefault) ? event.preventDefault() : event.returnValue = false;
}
}
/* -- 숫자+점(.) -------------------------------------------------------------------------------------------------------------------*/
function ValidNumDot(Obj) {
var jObj = $(Obj);
var val = jObj.val();
var required = jObj.attr("d-required");
if(required.toLowerCase() != "true" && val == ""){
return true;
}
val = val.replace( /\./g, "")
var msg = jObj.attr("d-msg");
if(jObj.attr("d-required") == "true" && val == "" ){
if(jObj.val() == ""){
msgShow(Obj, msg + " 항목 값을 입력해주세요.");
}
else{
msgShow(Obj, msg + " 항목 입력값을 확인하여 주세요.");
}
}
else{
var ext = /[^0-9]/g;
if(ext.test(val)){
msgShow(Obj, msg + " 항목 입력값을 확인하여 주세요.");
}
else{
return true;
}
}
jObj.focus();
return false;
}
function kuNumDot(Obj) {
var selLen = Obj.selectionStart;
var oVal = $(Obj).val();
var tVal = oVal.replace(/[^.0-9]/g , "");
if (oVal != tVal) {
$(Obj).val(tVal);
CurserSet(Obj, selLen + tVal.length - oVal.length);
}
}
function kdNumDot(Obj) {
var eKey = event.keyCode;
if (((eKey >= 48 && eKey <= 57) || (eKey >= 96 && eKey <= 105) || eKey == 8 || eKey == 46 || eKey == 37 || eKey == 39 || eKey == 9 || eKey == 190 || eKey == 110) && (event.shiftKey == false)) {
}
else {
(event.preventDefault) ? event.preventDefault() : event.returnValue = false;
}
}
function IsValidate(){
var isSucc = true;
$("[d-valid]").each(function (){
if(isSucc){
var valid = $(this).attr("d-valid");
isSucc = eval(valid + "(this)");
}
});
if(isSucc){
alert("데이터 전송 로직을 작성하시면 됩니다.");
}
else{
return false;
}
}
var _focusObj;
function msgShow(Obj, Msg){
_focusObj = Obj;
AlertMsg(Msg);
}
function AlertMsg(Msg){
$(".layerConts").html(Msg);
$(".layer-main").show();
}
function closelayer(){
$(".layer-main").hide();
$(_focusObj).focus();
}
</script>
</head>
<body>
<table style="width:600px;">
<colgroup>
<col style="width:60px;" />
<col style="width:140px;" />
<col style="width:60px;" />
<col style="width:140px;" />
<col style="width:200px;" />
</colgroup>
<tr>
<th>1-1항목</th>
<td>
<input type="text" style="width:100%;" d-valid="ValidNumber" d-required="true" d-msg="1-1항목" />
</td>
<th>1-2항목</th>
<td>
<input type="text" style="width:100%;" d-valid="ValidNumber" d-required="false" d-msg="1-2항목" />
</td>
<td>숫자만</td>
</tr>
<tr>
<th>2-1항목</th>
<td>
<input type="text" style="width:100%;" d-valid="ValidNumComma" d-required="true" d-msg="2-1항목" />
</td>
<th>2-2항목</th>
<td>
<input type="text" style="width:100%;" d-valid="ValidNumComma" d-required="false" d-msg="2-2항목" />
</td>
<td>숫자+콤마</td>
</tr>
<tr>
<th>3-1항목</th>
<td>
<input type="text" style="width:100%;" d-valid="ValidNumMinus" d-required="true" d-msg="3-1항목" />
</td>
<th>3-2항목</th>
<td>
<input type="text" style="width:100%;" d-valid="ValidNumMinus" d-required="false" d-msg="3-2항목" />
</td>
<td>숫자+장선(-)</td>
</tr>
<tr>
<th>4-1항목</th>
<td>
<input type="text" style="width:100%;" d-valid="ValidNumDot" d-required="true" d-msg="4-1항목" />
</td>
<th>4-2항목</th>
<td>
<input type="text" style="width:100%;" d-valid="ValidNumDot" d-required="false" d-msg="4-2항목" />
</td>
<td>숫자+점(.)</td>
</tr>
</table>
</body>
</html>
<input type="button" value="유효성체크" onclick="IsValidate();"/>
<!----- 레이어 alert 메세지 ----->
<div class="layer-main">
<div class="layer-popup">
<div class="layer-container">
<div class="layer-conts">
<div class="layer-title">
<div class="layerTitle">
에러메세지....
</div>
<div class="layer-close" onclick="closelayer()">
<img src="/images/kr/cm/btn_popupClose.gif" alt="" />
</div>
</div>
<div class="layerConts">
</div>
<div>
<a href="javascript:closelayer();" class="">
닫기
</a>
</div>
</div>
</div>
</div>
</div>
2017년 2월 7일 화요일
레이어 중앙정렬 및 Block 처리(Css로 처리)
----실행해 보기 시작-------------------------------------------------------------------------
----실행해 보기 끝-------------------------------------------------------------------------
<!DOCTYPE HTML><html>
<head>
<style>
.layer-main {
z-index:2000;
display:none;
position: fixed;
left: 0;
right: 0;
top: 0;
bottom: 0;
text-align: center;
background-color: rgba(0, 0, 0, 0.5);
}
.layer-main:before {
content: "";
display: inline-block;
height: 100%;
vertical-align: middle;
margin-right: -.25em;
}
.layer-popup {
display: inline-block;
vertical-align: middle;
background-color: #fff;
border: 1px solid #3571B5;
z-index: 10;
font-family:Tahoma;
}
.layer-popup .layer-container {
padding-bottom: 20px;
}
.layer-title {
overflow:hidden;
margin:0px;
padding:0px;
background-color: #474747;
height:36px;
}
.layerTitle {
float:left;
line-height:36px;
margin:0px;
padding:0px 0px 0px 10px;
font-size:15px;
color:#ffffff;
}
.layer-close {
float:right;
margin:0px;
padding:8px 10px;
cursor:pointer;
}
.layerConts {
clear:both;
margin-top:10px;
padding: 10px;
}
</style>
<script type="text/javascript">
function openlayer() {
document.getElementsByClassName("layer-main")[0].style.display = "block";
}
function closelayer() {
document.getElementsByClassName("layer-main")[0].style.display = "none";
}
function actionlayer() {
alert("actionlayer");
}
</script>
</head>
<body>
<div>ccccc<br>ccccc<br>ccccc<br>ccccc<br>ccccc<br>ccccc<br>ccccc<br>ccccc<br></div>
<div onclick="openlayer()">show click here</div>
<div class="layer-main">
<div class="layer-popup">
<div class="layer-container">
<div class="layer-conts">
<div class="layer-title">
<div class="layerTitle">
타이틀................................
</div>
<div class="layer-close" onclick="closelayer()">
<img src="/images/kr/cm/btn_popupClose.gif" alt="" />
</div>
</div>
<div class="layerConts">
레이어컨텐트<br>레이어컨텐트<br>레이어컨텐트<br>레이어컨텐트<br>레이어컨텐트<br>
</div>
<div>
<a href="javascript:actionlayer();" class="">
저장
</a>
</div>
</div>
</div>
</div>
</div>
</body>
</html>
2016년 9월 6일 화요일
common.js
String.prototype.format = function (args) {
var newStr = this;
for (var key in args) {
newStr = newStr.replace('{' + key + '}', args[key]);
}
return newStr;
}
String.prototype.formatAll = function (args) {
var newStr = this;
for (var key in args) {
newStr = newStr.split("{" + key + "}").join(args[key]);
}
return newStr;
}
String.prototype.getLpad = function (spad, len) {
var str = this;
while (str.length < len)
str = spad + str;
return str;
}
String.prototype.getDateFormat = function () {
var Week = ['일요일', '월요일', '화요일', '수요일', '목요일', '금요일', '토요일'];
var year = this.substring(0, 4);
var month = this.substring(4, 6);
var day = this.substring(6, 8);
var date = new Date(year, parseInt(month) - 1, day);
return {
date: "{YY}.{MM}.{DD}".format({ YY: year.substring(2, 4), MM: month, DD: day }),
fullDate: "{YYYY}.{MM}.{DD}".format({ YYYY: year.substring(0, 4), MM: month, DD: day }),
week: Week[date.getDay()],
month: month + "월",
day: day,
orginDate: date
}
}
String.prototype.isBlank = function () {
var str = this.trim();
for (var i = 0; i < str.length; i++) {
if ((str.charAt(i) != "\t") && (str.charAt(i) != "\n") && (str.charAt(i) != "\r")) {
return false;
}
}
return true;
}
String.prototype.isEmail = function () {
return (/\w+([-+.]\w+)*@\w+([-.]\w+)*\.[a-zA-Z]{2,4}$/).test(this.trim());
}
String.prototype.isDomain = function () {
return (/\w+([-.]\w+)*\.[a-zA-Z]{2,4}$/).test(this.trim());
}
String.prototype.isPhone = function () {
var arg = arguments[0] ? arguments[0] : "";
return eval("(/(02|0[3-9]{1}[0-9]{1})" + arg + "[1-9]{1}[0-9]{2,3}" + arg + "[0-9]{4}$/).test(this)");
}
String.prototype.isMobile = function () {
var arg = arguments[0] ? arguments[0] : "";
return eval("(/01[016789]" + arg + "[1-9]{1}[0-9]{2,3}" + arg + "[0-9]{4}$/).test(this)");
}
String.prototype.isBirth = function () {
return (/(19|20)[0-9]{2}[01]{1}[0-9]{1}[0123]{1}[0-9]{1}$/).test(this.trim());
}
String.prototype.isIncKor = function () {
return (/[ㄱ-ㅎ|ㅏ-ㅣ|가-하]/).test(this) ? true : false;
}
String.prototype.isKor = function () {
return (/^[가-힣]+$/).test(this) ? true : false;
}
String.prototype.isEngkor = function () {
return (/^[가-힣]+$/).test(this) ? true : (/^[a-zA-Z]+$/).test(this) ? true : false;
}
String.prototype.num = function () {
return (this.trim().replace(/[^0-9]/g, ""));
}
String.prototype.isNum = function () {
return (/^[0-9]+$/).test(this) ? true : false;
}
String.prototype.isEng = function () {
return (/^[a-zA-Z]+$/).test(this) ? true : false;
}
String.prototype.isEngNum = function () {
return (/^[0-9a-zA-Z]+$/).test(this) ? true : false;
}
String.prototype.money = function () {
var num = this.trim();
while ((/(-?[0-9]+)([0-9]{3})/).test(num)) {
num = num.replace((/(-?[0-9]+)([0-9]{3})/), "$1,$2");
}
return num;
}
//</String.prototype>
String.prototype.decodeEntity = function () {
return this.replace(/&/gi, "&").replace(/</gi, "<").replace(/>/gi, ">");
};
String.prototype.decodeCode = function () {
return this.replace(/'/g, "'")
.replace(/(/g, "(")
.replace(/)/g, ")")
.replace(/"/g, "'")
.replace(/</g, "<")
.replace(/>/g, ">")
.replace(/
/gi, "\r");
};
String.prototype.stripHtml = function () {
return $('<div/>').html(this).text();
};
Date.prototype.yyyymmdd = function () {
var yyyy = this.getFullYear().toString();
var mm = (this.getMonth() + 1).toString();
var dd = this.getDate().toString();
return yyyy + (mm[1] ? mm : "0" + mm[0]) + (dd[1] ? dd : "0" + dd[0]);
};
String.prototype.decodeEntity = function () {
return this.replace(/&/gi, "&").replace(/</gi, "<").replace(/>/gi, ">");
};
String.prototype.decodeCode = function () {
return this.replace(/'/g, "'")
.replace(/(/g, "(")
.replace(/)/g, ")")
.replace(/"/g, "'")
.replace(/</g, "<")
.replace(/>/g, ">")
.replace(/
/gi, "\r");
};
String.prototype.stripHtml = function () {
return $('<div/>').html(this).text();
};
Date.prototype.yyyymmddDash = function () {
var yyyy = this.getFullYear().toString();
var mm = (this.getMonth() + 1).toString();
var dd = this.getDate().toString();
return yyyy + '-' + (mm[1] ? mm : "0" + mm[0]) + '-' + (dd[1] ? dd : "0" + dd[0]);
};
$.is_mobile = function () {
//if(TOUR_CLI_TP=='W') return false;
if (_agent.match(/android/) || _agent.match(/(iphone|ipod|ipad)/)) {
return typeof arguments[0] == 'undefined' ? true : (function (a, cs) {
return a.match((cs == 'android' ? /android/ : /(iphone|ipod|ipad)/)) ? true : false;
})(_agent, arguments[0]);
}
return false;
};
2016년 8월 19일 금요일
모바일 레이어 중앙 정렬 및 기타
<pre name="code" class="jscript">
<html lang="ko">
<head>
<title>싸니까 믿으니까 인터파크 투어</title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=no">
<style>
.over-hidden {
overflow: hidden;
}
.over-auto {
overflow: auto;
}
.layer-container {
position: absolute;
top: 0px;
left: 0px;
z-index: 100;
background-color: #fff;
opacity: 1;
width: 90%;
}
.back-layer {
position: absolute;
left: 0;
top: 0;
z-index: 99;
background-color: #000000;
width: 100%;
opacity: 0.5;
}
.newlayer-container {
position: absolute;
top: 0px;
left: 0px;
width: 100%;
z-index: 110;
background-color: #fff;
opacity: 1;
}
.newback-layer {
position: absolute;
left: 0;
top: 0;
z-index: 99;
background-color: #808080;
height: 100%;
width: 100%;
opacity: 1;
}
.playerlayer-container {
position: absolute;
top: 0px;
left: 0px;
width: 100%;
height: 100%;
z-index: 120;
background-color: #fff;
opacity: 1;
}
</style>
<script type="text/javascript" src="http://code.jquery.com/jquery-1.10.2.min.js"></script>
<script type="text/javascript">
$(document).ready(function () {
});
function ShowBackCenterLayerTest(cnt, top) {
var layerID = "center_" + cnt;
var makeHtml = "";
makeHtml += " <div id='" + layerID + "' class='layer-container'>";
for (var i = 0; i < cnt; i++) {
makeHtml += " <div> BackCenter컨텐츠_" + cnt + " </div>";
if ((i + 1) % 10 == 0) {
makeHtml += " <div onclick='fnCloseLayerAttr(this);' data-close='" + layerID + "'> 닫기</div>";
}
}
makeHtml += " <div onclick='fnCloseLayerAttr(this);' data-close='" + layerID + "'> 닫기</div>";
makeHtml += " </div>";
fnMakeLayer(layerID, "body", makeHtml);
fnShowCenterLayer(layerID, top, 500, "left", callback1);
}
function ShowBackTopLayerTest(cnt, top) {
var layerID = "BackTop_" + cnt;
var makeHtml = "";
makeHtml += " <div id='" + layerID + "' class='layer-container'>";
for (var i = 0; i < cnt; i++) {
makeHtml += " <div> BackTop컨텐츠_" + cnt + " </div>";
if ((i + 1) % 10 == 0) {
makeHtml += " <div onclick='fnCloseLayerAttr(this);' data-close='" + layerID + "'> 닫기</div>";
}
}
makeHtml += " <div onclick='fnCloseLayerAttr(this);' data-close='" + layerID + "'> 닫기</div>";
makeHtml += " </div>";
fnMakeLayer(layerID, "body", makeHtml);
fnShowTopLayer(layerID, top, 500, "left", callback1);
}
function ShowNewTopLayerTest(cnt, top) {
var layerID = "NewTop_" + cnt;
var makeHtml = "";
makeHtml += "<div id='" + layerID + "' class='newback-layer'>";
makeHtml += " <div class='newlayer-container'>";
for (var i = 0; i < cnt; i++) {
makeHtml += " <div> NewTop컨텐츠_" + cnt + " </div>";
if ((i + 1) % 10 == 0) {
makeHtml += " <div onclick='fnCloseLayerAttr(this);' data-close='" + layerID + "'> 닫기</div>";
}
}
makeHtml += " <div onclick='fnCloseLayerAttr(this);' data-close='" + layerID + "'> 닫기</div>";
makeHtml += " </div>";
makeHtml += "</div>";
fnMakeLayer(layerID, "body", makeHtml);
fnShowNewTopLayer(layerID, 500, "left", callback1);
}
function callback1() {
console.log("callback1");
}
</script>
<script type="text/javascript">
var _arrLayerID = []; // 리사이즈시 레이어를 제어하기위해 {layerID, topMargin, ShowType}
$(window).resize(function () {
setTimeout(function () {
LayerResize()
}, 30);
});
function LayerResize() {
for (var i = 0; i < _arrLayerID.length; i++) {
var jqueryObj = $("#" + _arrLayerID[i].layerID);
if (jqueryObj.css("display") != "none") {
if (_arrLayerID[i].ShowType == "fnShowCenter") {
fnShowCenterLayer(_arrLayerID[i].layerID, _arrLayerID[i].topMargin, 0);
}
else if (_arrLayerID[i].ShowType == "fnShowTop") {
fnShowTopLayer(_arrLayerID[i].layerID, _arrLayerID[i].topMargin, 0);
}
}
}
}
function fnMakeLayer(layerID, parentID, makeHtml) {
var layerSelecter = "#" + layerID;
if ($(layerSelecter).length > 0) {
return;
}
var parentSelecter = "";
if (parentID == null || parentID == "" || parentID == "body") {
parentSelecter = "body";
}
else {
parentSelecter = "#" + parentID;
}
$(parentSelecter).append(makeHtml);
}
function fnSetLayer(ID, top, div) {
var isAddAble = true;
for (var i = 0; i < _arrLayerID.length; i++) {
if (_arrLayerID[i].layerID == ID) {
isAddAble = false;
}
}
if (isAddAble) {
_arrLayerID.push({ layerID: ID, topMargin: top, ShowType: div });
}
}
function fnShowBackLayer(layerID, topMargin) {
var backID = layerID + "back";
if ($("#" + backID).length == 0) {
var addHtml = $("<div></div>").attr("id", backID).addClass("back-layer");
$("#divWrap").append(addHtml);
$("#" + backID).bind('touchmove', function (e) { e.preventDefault() });
}
var con_h = $("#" + layerID).height() + $(window).scrollTop() + topMargin;
var win_h = $(window).height();
if (con_h > win_h) {
$("#" + backID).height(con_h);
}
else {
$("#" + backID).height(win_h);
}
$("#" + backID).show();
}
function fnShowCenterLayer(layerID, topMargin, duration, slideType, callback) {
var layerSelecter = "#" + layerID;
$(layerSelecter).removeClass("over-auto");
$(layerSelecter).css("height", "auto");
if (topMargin == null || topMargin == "") {
topMargin = "0";
}
topMargin = Number(topMargin);
fnSetLayer(layerID, topMargin, "fnShowCenter");
//var win_w = $(window).width();
//var win_h = $(window).height();
var win_w = screen.width;
var win_h = screen.height;
var con_w = $(layerSelecter).width();
var con_h = $(layerSelecter).height();
var scrollTop = $(window).scrollTop();
var movetop = ((win_h - con_h) / 2);
var moveleft = (win_w - con_w) / 2;
if (movetop < 0) {
movetop = 0;
}
movetop += scrollTop + topMargin;
if (con_h + (topMargin * 2) > win_h) {
$(layerSelecter).css("height", win_h - (topMargin * 2));
}
$("body").css("overflow", "hidden");
$(layerSelecter).css("overflow", "auto");
$(layerSelecter).show();
fnShowBackLayer(layerID, topMargin);
$(layerSelecter).css("left", "100%").css("top", movetop);
$(layerSelecter).animate({
left: moveleft,
top: movetop
},
duration,
function () {
if (callback != null) {
callback();
}
});
}
function fnShowTopLayer(layerID, topMargin, duration, slideType, callback) {
var layerSelecter = "#" + layerID;
$(layerSelecter).css("height", "auto");
if (topMargin == null || topMargin == "") {
topMargin = "0";
}
topMargin = Number(topMargin);
fnSetLayer(layerID, topMargin, "fnShowTop");
var win_w = screen.width;
var win_h = screen.height;
var con_w = $(layerSelecter).width();
var con_h = $(layerSelecter).height();
var scrollTop = $(window).scrollTop();
var movetop = topMargin;
var moveleft = (win_w - con_w) / 2;
if (movetop < 0) {
movetop = 0;
}
movetop += scrollTop;
$(layerSelecter).show();
fnShowBackLayer(layerID, topMargin);
$(layerSelecter).css("left", "100%").css("top", movetop);
$(layerSelecter).animate({
left: moveleft,
top: movetop
},
duration,
function () {
if (callback != null) {
callback();
}
});
}
function fnShowNewTopLayer(layerID, duration, slideType, callback) {
var layerSelecter = "#" + layerID;
$("body").css("overflow", "hidden");
var scrollTop = $(window).scrollTop();
$(layerSelecter).css("overflow", "auto");
$(layerSelecter).css("left", "100%").css("top", scrollTop).show();
$(layerSelecter).animate({
left: 0,
top: scrollTop
},
duration,
function () {
if (callback != null) {
callback();
}
});
}
function fnCloseLayerAttr(obj) {
var layerID = $(obj).attr("data-close");
fnCloseLayer(layerID);
}
function fnCloseLayer(layerID) {
$("body").css("overflow", "auto");
$("#" + layerID + "back").hide();
$("#" + layerID).hide();
for (var i = 0; i < _arrLayerID.length; i++) {
if (_arrLayerID[i].layerID == layerID) {
_arrLayerID.splice(i, 1);
}
}
}
</script>
</head>
<body>
<div id="divWrap">
<div>줄바꿈<br /><br /></div>
<div>줄바꿈<br /><br /></div>
<div>줄바꿈<br /><br /></div>
<div>
<a href="javascript:ShowBackCenterLayerTest(5, 0);"> 레이어 센터(margintop 0) </a>
<br />
<br />
</div>
<div>
<a href="javascript:ShowNewTopLayerTest(30, 0);"> 레이어 새창처럼 (margintop 0) </a>
<br />
<br />
</div>
<div>
<a href="javascript:ShowBackCenterLayerTest(40, 20);"> 레이어 센터(margintop 20) </a>
<br />
<br />
</div>
<div>
<a href="javascript:ShowBackCenterLayerTest(60, 80);"> 레이어 센터(margintop 80) </a>
<br />
<br />
</div>
<div>
<a href="javascript:ShowBackCenterLayerTest(60, 0);"> 레이어 센터(margintop 0) </a>
<br />
<br />
</div>
<div>
<a href="javascript:ShowBackTopLayerTest(10, 10);"> 레이어 Top (margintop 10) </a>
<br />
<br />
</div>
<div>
<a href="javascript:ShowBackTopLayerTest(40, 20);"> 레이어 Top (margintop 20)</a>
<br />
<br />
</div>
<div>
<a href="javascript:ShowBackTopLayerTest(60, 80);"> 레이어 Top (margintop 80)</a>
<br />
<br />
</div>
<div>
<a href="javascript:ShowBackTopLayerTest(60, 0);"> 레이어 Top (margintop 0)</a>
<br />
<br />
</div>
<div>
<a href="javascript:ShowNewTopLayerTest(30, 0);"> 레이어 새창처럼 (margintop 0) </a>
<br />
<br />
</div>
<div>
<a href="javascript:ShowNewTopLayerTest(60, 0);"> 레이어 새창처럼 </a>
<br />
<br />
</div>
<div>줄바꿈<br /><br /></div>
<div>줄바꿈<br /><br /></div>
<div>줄바꿈<br /><br /></div>
<div>줄바꿈<br /><br /></div>
<div>줄바꿈<br /><br /></div>
<div>줄바꿈<br /><br /></div>
<div>줄바꿈<br /><br /></div>
<div>줄바꿈<br /><br /></div>
</div>
</body>
</html>
</pre>
피드 구독하기:
덧글 (Atom)