SQLの窓

2009年12月31日


JS : テキストエリア内の選択文字列の置き換え

最近、セキュリティ制限やらで prompt が使え無い場合があって、
自分でセキュリティ設定が必要になりますが、それはとりあえず置いておいて、
テキストエリア内の選択文字列をタイトルにしたリンクの作成方法です
<script type="text/javascript">

function createURLLink() {

	var userAgent = window.navigator.userAgent.toLowerCase();
	var appVersion = window.navigator.appVersion.toLowerCase();
	var txt = "";
	var strUrl = "";
	if (userAgent.indexOf("msie") > -1) {

		var objSelectedText = document.selection
		var objTextRange = objSelectedText.createRange( )

		if (objTextRange.text.length == 0 ) {
			return;
		}
		try {
			strUrl = prompt("URLリンク作成","http://");
			if ( strUrl != "" && strUrl != "http://" && strUrl+"" != "null" ) {
				txt = objTextRange.text
				txt = "<a href=\""+strUrl+"\" target=\"_blank\">"+txt+"</a>"
				objTextRange.text = txt;
			}
		}catch( e ){}
	}
	else {
		var obj = document.getElementById("txt091231d")
		var ns = obj.selectionStart;
		var ne = obj.selectionEnd;
		var nl;

		if ( ns != ne ) {
			strUrl = prompt("URLリンク作成","http://");
			if ( strUrl != "" && strUrl != "http://" && strUrl+"" != "null" ) {
				txt = obj.value.substring(ns, ne);
				txt = "<a href=\""+strUrl+"\" target=\"_blank\">"+txt+"</a>"
				nl = txt.length
				txt = obj.value.substring(0, ns)
					+ txt + obj.value.substring(ne,obj.value.length);
				obj.value = txt;
				obj.setSelectionRange(ns,ns+nl);
			}
		}

	}

}

</script>

<TEXTAREA id=txt091231d rows=5 wrap=off cols=50></TEXTAREA>
<input type=button value="リンク作成" onClick='createURLLink()'>




タグ:javascript
posted by lightbox at 2009-12-31 16:14 | JavaScript コンテンツ | このブログの読者になる | 更新情報をチェックする

JS : ブログ内でテキストエリアの作成方法

上はそのまま HTML を書いてますが、下は JavaScript のdocument.write で書き出しています。Seesaa では HTML をそのまま書いてもうまくいくようになっていますが、プログの本文は、アプリケーション的にはテキストエリアなので、ひょっとして場合によってはうまくいかない可能性もあります。そういう場合は JavaScriptバージョンで対応できます
<script type="text/javascript">
str="";
str+="<"+"textarea wrap=off id=txt091231a cols=50 rows=5><"+"\/textarea> ";
document.write(str);
</script>

で、以下のテキストエリアは自作の JavaScript アプリケーションなので、タブが使えます。選択して一括で複数行にタブが挿入できて、SHIFT+TAB で逆にタブを削除できます。
<SCRIPT 
	type="text/javascript"
	src="http://lightbox.on.coocan.jp//tabtextarea.js">
</SCRIPT>
<script type="text/javascript">
createTabTextArea("txt091231c",50,5);
</script>


▲ 使い方です。そのまま使ってもいいし、.js ダウンロードしてもらってもいいです

※ この場合は name 属性しか無いので JavaScript で参照は以下のようになります
document.getElementsByName("txt091231c")[0].value




タグ:javascript
posted by lightbox at 2009-12-31 15:00 | 記録 | このブログの読者になる | 更新情報をチェックする

2009年12月28日


Ruby : Seesaa のブログ設定画面で、Form選択からコンボボックス、ラジオボタン、チェックボックスの設定

ブログを新しく作成した場合、初期設定がけっこうたいへんです。
Ruby に全部やらせてしまおうと以前から思ってましたので、手始めとして
ブログ設定の自動設定を作成しました。

全てうまくいったら WEB サービスして公開します
#!/usr/local/bin/ruby
print "Content-type: text/html\n\n"

require "cgi"
cgi = CGI.new

ENV['GEM_HOME']="/home/lightbox/gems"
$LOAD_PATH.push('/home/lightbox/lib')

require 'rubygems'
require 'mechanize'

agent = WWW::Mechanize.new
#seesaa にログイン
page = agent.get("https://ssl.seesaa.jp/www/pages/welcome/login/input")
form = page.forms.first
form["member__email"] = "メールアドレス"
form["member__password"] = "パスワード"
form.submit

# 対象ブログのページ
page = agent.get('http://blog.seesaa.jp/pages/my/blog/home/?blog_id=ブログ番号')

# 設定ページ
page = agent.get('http://blog.seesaa.jp/pages/my/blog/settings/basics/edit/input')

# 3番目のフォーム
form = page.form_with(:name => 'myform')

# カテゴリコンボボックスを IT/インターネット にセット
form.field_with(:name => 'blog_category_id').value = "41"
# form.field_with(:name => 'blog_category_id').options[1].value

# メールマガジン無し
form.checkbox_with(:name => 'blog__mailmag_text').uncheck
form.checkbox_with(:name => 'blog__mailmag_html').uncheck
form.checkbox_with(:name => 'blog__mailmag_summary').uncheck

# コメントを通知する
form.radiobuttons_with(:name => 'blog__alert_comment')[0].check
form["blog__alert_email"] = "メールアドレス"

# 共有ヘッダを無しでセット
form.radiobuttons_with(:name => 'blog_ext__common_header')[1].check

# 更新
page = form.click_button(form.buttons[1])

print "seesaa : settings_basics : update : ok"





タグ:ruby Mechanize
posted by lightbox at 2009-12-28 02:19 | Ruby | このブログの読者になる | 更新情報をチェックする

2009年12月27日


JavaScript : 正規表現の任意の文字列

解りやすい確実そうな方法が [\s\S]+ でした。
\s : スペース、タブ、フォームフィードなどの任意の空白文字
\S : 空白文字以外の任意の文字

[.\n]+ ができそうですが、JavaScript でエラーになります。
他の言語でおいおいチェックしますが、今回の結果です。

.+ はうまく動くのですが、当然ですが . に改行は含まれません
テキスト全体を /g で検索する場合は注意して下さい。

テキスト全体では、[\s\S]+? の後ろに終わって欲しい文字
または文字列を指定して下さい。これは重要です。








タグ:正規表現
posted by lightbox at 2009-12-27 20:44 | JavaScript 正規表現 | このブログの読者になる | 更新情報をチェックする

JavaScript : g の無い正規表現の結果

/g が無い場合は、配列に結果が入ります。
最初に全ての一致、それ以降はサプマッチです
しかし、ReqExp.$1 にもセットされるので、ループ処理で使う場合しか使いません。
var str = '<A href="URL" target="_blank">テキスト</A>';
var arr = str.match(/<a[\s\S]+?>(.+)<\/a>/i);
alert(arr[0]);
alert(arr[1]);
alert(RegExp.$1);




posted by lightbox at 2009-12-27 20:29 | JavaScript 正規表現 | このブログの読者になる | 更新情報をチェックする

JavaScriptの正規表現

このページのリンクらしき文字列を全て取得します。




function getLink1() {
	var str = document.getElementsByTagName("BODY")[0].innerHTML;
	var arr = str.match(/<a[^>]+>/ig);
	str = "";
	var len = arr.length;
	for( i = 0; i < len; i++ ) {
		str += arr[i] + "\n"
	}
	document.getElementById("resultLinkText").value = str;
}
function getLink2() {
	var str = document.getElementsByTagName("BODY")[0].innerHTML;
	var arr = str.match(/<a[\s\S]+?>/ig);
	str = "";
	var len = arr.length;
	for( i = 0; i < len; i++ ) {
		str += arr[i] + "\n"
	}
	document.getElementById("resultLinkText").value = str;
}

function getLink3() {
	var str = document.getElementsByTagName("BODY")[0].innerHTML;
	var arr = str.match(/<a[\s\S]+?a>/ig);
	var arr2;
	
	str = "";
	var len = arr.length;
	for( i = 0; i < len; i++ ) {
		var arr2 = arr[i].match(/>(.+)</i);
		try {		
			str+= arr2[1] + "\n";
		} catch(e){}
	}
	document.getElementById("resultLinkText").value = str;
}
※ BODY より取得するので、IFRAME 内は対象外です
※ <a[^>]+> は、<a で始まって、> 以外が1つ以上続いて > で終わると言う意味です。
※ <a[\s\S]+?> は、<a で始まって、
任意の文字が1つ以上続いて > で終わる最短の文字列と言う意味です。
※ <a>〜</a> の 〜は単純には取得できません 一旦取得したアンカーより内側の文字列を取得しています ※ /ig の i は、大文字小文字を区別しないという意味です。 ※ /ig の g は、全ての対象を最後まで探すという意味です。 ■ もう少し詳しく JavaScriptの正規表現


posted by lightbox at 2009-12-27 20:05 | JavaScript 正規表現 | このブログの読者になる | 更新情報をチェックする
Seesaa の各ページの表示について
Seesaa の 記事がたまに全く表示されない場合があります。その場合は、設定> 詳細設定> ブログ設定 で 最新の情報に更新の『実行ボタン』で記事やアーカイブが最新にビルドされます。

Seesaa のページで、アーカイブとタグページは要注意です。タグページはコンテンツが全く無い状態になりますし、アーカイブページも歯抜けページはコンテンツが存在しないのにページが表示されてしまいます。

また、カテゴリページもそういう意味では完全ではありません。『カテゴリID-番号』というフォーマットで表示されるページですが、実際存在するより大きな番号でも表示されてしまいます。

※ インデックスページのみ、実際の記事数を超えたページを指定しても最後のページが表示されるようです

対処としては、このようなヘルプ的な情報を固定でページの最後に表示するようにするといいでしょう。具体的には、メインの記事コンテンツの下に『自由形式』を追加し、アーカイブとカテゴリページでのみ表示するように設定し、コンテンツを用意するといいと思います。


※ エキスパートモードで表示しています

アーカイブとカテゴリページはこのように簡単に設定できますが、タグページは HTML 設定を直接変更して、以下の『タグページでのみ表示される内容』の記述方法で設定する必要があります

<% if:page_name eq 'archive' -%>
アーカイブページでのみ表示される内容
<% /if %>

<% if:page_name eq 'category' -%>
カテゴリページでのみ表示される内容
<% /if %>

<% if:page_name eq 'tag' -%>
タグページでのみ表示される内容
<% /if %>
この記述は、以下の場所で使用します
container 終わり

フリーフォントで簡単ロゴ作成
フリーフォントでボタン素材作成
フリーフォントで吹き出し画像作成
フリーフォントではんこ画像作成
ほぼ自由に利用できるフリーフォント
フリーフォントの書体見本とサンプル
画像を大きく見る為のウインドウを開くボタンの作成

CSS ドロップシャドウの参考デモ
BUTTONS (CSS でボタン)
イラストAC
ぱくたそ
写真素材 足成
フリーフォント一覧
utf8 文字ツール
右サイド 終わり
base 終わり