スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

はてなブックマークに追加 はてなブックマーク - スポンサーサイト

textarea文字列をタグで囲んだ後のカーソル表示

MyHome PortalのVer.3.11で、textareaへのタグ&アイコン挿入を改善しました。
textareaへのタグ&アイコン挿入には、
「textareaの選択範囲を取得し、前後に文字列を挿入する」
http://archiva.jp/web/javascript/getRange_in_textarea.html
のJavaScriptを使わせてもらっていましたが、タグ&アイコン挿入後に、カーソル(キャレット)が、textareaから出てしまったりしていました。タグ&アイコン挿入後も、カーソル(キャレット)がtextarea内に残るように、修正しました。カーソル(キャレット)が挿入タグの後ろに表示されるようにしました。
IEの場合、選択文字列をタグで囲んだ時には、挿入後のカーソル位置を決めるため、選択位置前の改行コードや、選択範囲内の改行コードの数を数える必要があるようです。
IEの場合、文字列を囲むのではなく、アイコン挿入など単に文字列挿入の場合、元のロジックでは行末と行頭の区別を付けることが出来ず、行頭にアイコン挿入が出来なかったので、シンプルに
var selection = document.selection.createRange();
selection.text = tag1 + tag2 + selection.text;
で、処理するようにしました。
これらにより、全体的に継ぎ接ぎ的なロジックになってしまいました。根本的にロジックを見直せば、もっとスッキリすると思われますが、とりあえず、これにてリリースしました。

以下に、修正版のJavaScriptソースを添付しておきます。
-------------------------------
function encloseTextArea(tag1, tag2, obj) {
var target = document.getElementById(obj);
var pos = getAreaRange(target);
if (isIE && (tag2 == '' || pos.start == pos.end)) {
target.focus();
var selection = document.selection.createRange();
selection.text = tag1 + tag2 + selection.text;
return;
}
var val = target.value;
var range = val.slice(pos.start, pos.end);
var beforeNode = val.slice(0, pos.start);
var afterNode = val.slice(pos.end);
var insertNode;
if (range || pos.start != pos.end) {
insertNode = tag1 + range + tag2 ;
target.value = beforeNode + insertNode + afterNode;
} else if (pos.start == pos.end) {
insertNode = tag1 + tag2;
target.value = beforeNode + insertNode + afterNode;
}
target.focus();
if (isIE) {
r = target.createTextRange();
if (retmatch = beforeNode.match(/\r\n/g)) {
retnum = retmatch.length;
} else {
retnum = 0;
}
if (range) {
if (retmatch = range.match(/\r\n/g)) {
retnum += retmatch.length;
}
}
r.move('character', pos.end + tag1.length + tag2.length - retnum);
r.select();
} else {
var newpos = pos.end + tag1.length + tag2.length;
target.setSelectionRange(newpos, newpos);
}
}
function getAreaRange(obj) {
var pos = new Object();
if (isIE) {
obj.focus();
var range = document.selection.createRange();
var clone = range.duplicate();
clone.moveToElementText(obj);
clone.setEndPoint('EndToEnd', range);
pos.start = clone.text.length - range.text.length;
pos.end = clone.text.length - range.text.length + range.text.length;
} else if(window.getSelection()) {
pos.start = obj.selectionStart;
pos.end = obj.selectionEnd;
}
return pos;
}
var isIE = (navigator.appName.toLowerCase().indexOf('internet explorer')+1?1:0);
スポンサーサイト

はてなブックマークに追加 はてなブックマーク - textarea文字列をタグで囲んだ後のカーソル表示

theme : JavaScript
genre : コンピュータ

Ver.3.11:textareaタグ&アイコン挿入改善

MyHome Portal Ver.3.11をリリースしました。
http://ok2nd.web.fc2.com/download.html

「カレンダー」のスケジュール入力画面で、textarea本文へのタグやアイコンの挿入時に、カーソル(キャレット)を挿入位置の後ろに表示するようにしました。

はてなブックマークに追加 はてなブックマーク - Ver.3.11:textareaタグ&アイコン挿入改善

theme : JavaScript
genre : コンピュータ

Ver.3.10:ImageMagickを使った画像処理

MyHome Portal Ver.3.10をリリースしました。
http://ok2nd.web.fc2.com/download.html

「アルバム」に、ImageMagickを使った画像処理機能を追加しました。

PHPには、ImageMagickのPECL拡張モジュールがありますが、それを使わずに、コマンドconvertをexec()でコールする方法を取っています。

この画像処理機能を使う場合、ImageMagickをインストールする必要があります。
http://www.imagemagick.org/script/index.php

cnv-1.jpg
cnv-2.jpg
cnv-3.jpg

はてなブックマークに追加 はてなブックマーク - Ver.3.10:ImageMagickを使った画像処理

theme : PHP
genre : コンピュータ

MySQLのストレージエンジンをInnoDBにする方法

MyHome Portalでは、MySQLのストレージエンジンはMyISAMを使っています。
MySQLの代表的なストレージエンジンには、MyISAMとInnoDBがありますが、
【漢(オトコ)のコンピュータ道:MyISAMからInnoDBへ切り替えるときの注意点】
http://nippondanji.blogspot.com/2009/02/myisaminnodb.html
によれば、MyISAMの欠点として以下のものが上げられています。
・トランザクション対応ではない。
・クラッシュセーフではない。
・更新と参照が入り乱れた場合の同時実行性能がよくない。
・テーブルが大きく(数億行とか)なるとINSERTの性能が劣化する。
2番目の「クラッシュセーフではない」というのが一番気になるとところです。

ということで、MyHome PortalのストレージエンジンをInnoDBにしたい方のための簡単な手順を以下に書きます。
なお、トラブルが発生してもサポートできませんので、あくまでも自己責任でお願いいたします。事前にMyISAMの状態でバックアップをとっておいてください。
以下、MySQL管理者ユーザーrootのパスワードを「kanri789」、インストールドライブを「D:」として説明します。
●1.XAMPPは初期状態では、InnoDBが使えませんので、InnoDBを有効にする必要があります。
【参考:XAMPP環境でMySQLのInnoDBを有効にする】
http://code.xenophy.com/?p=127
[xamppインストールディレクトリ]/mysql/bin/my.cnf
(例:D:\xampp\mysql\bin\my.cnf)
を以下のように編集して、MySQLを再起動します。
skip-innodbの先頭に#を頭につけてコメントアウトします。
skip-innodbの下4行のinnodb_...の頭の#を外します。
その他innodb_...は任意で設定してください。
------------------------------------------------------
#skip-innodb
innodb_data_home_dir = "D:/xampp/mysql/"
innodb_data_file_path = ibdata1:10M:autoextend
innodb_log_group_home_dir = "D:/xampp/mysql/"
innodb_log_arch_dir = "D:/xampp/mysql/"

# You can set .._buffer_pool_size up to 50 - 80 %
# of RAM but beware of setting memory usage too high
innodb_buffer_pool_size = 16M
innodb_additional_mem_pool_size = 2M
# Set .._log_file_size to 25 % of buffer pool size
innodb_log_file_size = 5M
innodb_log_buffer_size = 8M
innodb_flush_log_at_trx_commit = 1
innodb_lock_wait_timeout = 50
------------------------------------------------------
コマンドプロンプトで、以下を実行してMySQLを再起動します。
net stop mysql
net start mysql
------------------------------------------------------
●2.MyHome Portalの実運用データベースの更新系テーブルをInnoDBにします。
コマンドプロンプトで、以下を実行します。
「ERROR 1025 (HY000): Error on rename ...」
というエラーが出る場合があります。その場合は、以下の一連の処理を再実行します。多分2度目はエラーが出ません。
------------------------------------------------------
mysql -u root -pkanri789
use _mydb_abook;
ALTER TABLE m_abook ENGINE=InnoDB;
ALTER TABLE m_category ENGINE=InnoDB;
ALTER TABLE m_check_caption ENGINE=InnoDB;
use _mydb_account;
ALTER TABLE m_account ENGINE=InnoDB;
ALTER TABLE m_friends ENGINE=InnoDB;
ALTER TABLE m_public ENGINE=InnoDB;
ALTER TABLE z_loginlog ENGINE=InnoDB;
use _mydb_bbs;
ALTER TABLE m_bbs ENGINE=InnoDB;
ALTER TABLE m_category ENGINE=InnoDB;
use _mydb_calendar;
ALTER TABLE m_category ENGINE=InnoDB;
ALTER TABLE m_schedule ENGINE=InnoDB;
ALTER TABLE m_todo ENGINE=InnoDB;
use _mydb_chat;
ALTER TABLE m_messages ENGINE=InnoDB;
use _mydb_diary;
ALTER TABLE m_category ENGINE=InnoDB;
ALTER TABLE m_marker ENGINE=InnoDB;
ALTER TABLE m_schedule ENGINE=InnoDB;
use _mydb_index;
ALTER TABLE m_category ENGINE=InnoDB;
ALTER TABLE m_homepage ENGINE=InnoDB;
ALTER TABLE m_oftenuse ENGINE=InnoDB;
use _mydb_kakeibo;
ALTER TABLE m_chokin ENGINE=InnoDB;
ALTER TABLE m_ginkou ENGINE=InnoDB;
use _mydb_memo;
ALTER TABLE m_category ENGINE=InnoDB;
ALTER TABLE m_memo ENGINE=InnoDB;
use _mydb_rss;
ALTER TABLE m_category ENGINE=InnoDB;
ALTER TABLE m_rss ENGINE=InnoDB;
use _mydb_sticky;
ALTER TABLE m_category ENGINE=InnoDB;
ALTER TABLE m_notes ENGINE=InnoDB;
use _mydb_study;
ALTER TABLE m_category ENGINE=InnoDB;
ALTER TABLE m_category2 ENGINE=InnoDB;
ALTER TABLE m_mycheck ENGINE=InnoDB;
ALTER TABLE m_study ENGINE=InnoDB;
use _mydb_zid_mgr_a;
ALTER TABLE m_category ENGINE=InnoDB;
ALTER TABLE m_pass ENGINE=InnoDB;
use _mydb_zid_mgr_b;
ALTER TABLE m_pass2 ENGINE=InnoDB;
exit;

はてなブックマークに追加 はてなブックマーク - MySQLのストレージエンジンをInnoDBにする方法

theme : システム開発
genre : コンピュータ

プロフィール

Author:ok.2nd
HomePage:
http://ok2nd.web.fc2.com/
Email: m.ok.2nd@gmail.com

最新記事
最新コメント
最新トラックバック
月別アーカイブ
FC2ブログランキング

FC2Blog Ranking

検索フォーム
カテゴリ
リンク
RSSリンクの表示
ブロとも申請フォーム

この人とブロともになる

QRコード
QRコード
ユーザータグ

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。