SimplyWrite — это бесплатный инструмент для веб-отвлечения. Он основан на IndexedDB HTML5, поэтому вам необходим браузер. Поскольку при использовании IndexedDB весь контент хранится локально на вашем компьютере , никакие данные не передаются и не хранятся на удаленном сервере.
Есть много других решений, как WriteRoom , OmmWriter или FocusWritter , но SimplyWrite извлекает выгоду из того факта , что это клон веб — инструмент.
Вы можете скачать исходники с github .
Пожалуйста, посмотрите и дайте мне знать ваши предложения.
На данный момент SimplyWrite был протестирован только на Chromium 9, потому что требуется реализация браузера IndexedDB.
Помимо удивительного объявления
Ладно, SimplyWrite — это круто, и это объявление изменит мир, но… правда в том, что все это потому, что мне нужна цель для работы с IndexedDB.
HTML5 давно отсутствует (почти год — это 100 сотен в Интернете), и скоро появится множество новых функций, которые браузер будет реализовывать в последующих выпусках (по крайней мере, я на это надеюсь).
Хранение на стороне клиента
HTML5 поставляется с различными решениями для хранилища на стороне клиента: WebStorage, Web SQL Database и IndexedDB.
На данный момент одной из основных проблем является HTML5 — отличная спецификация, но большая и сложная для реализации браузерами. Поэтому вам необходимо проверить, поддерживается ли нужная функция браузером, который вы собираетесь использовать.
Таким образом, WebStorage является механизмом ключ-значение, WebSQLDatabase , к сожалению, не очень хорошая идея (потому что от него отказались), и, наконец, IndexedDB можно понимать как идеальное сочетание WebStorage и WebSQLDatabase.
WebSQLDatabase, как и Google Gears, был в основном основан на SQLite, потому что многие реализации HTML5 тоже были основаны на SQLite, унаследовав его ограничения. Mozilla никогда не соглашается со стандартом WebDatabase и потому что это никогда не реализует его на своем баузере. Они предпочитают работать в IndexedDB.
Важным соображением является то, что IndexedDB определяет два «рабочих режима»: асинхронный и синхронный, но в данный момент поддерживается только асинхронный режим.
Работа с IndexedDB
Вот кусочки исходного кода для общего действия.
Получение ссылки на IndexedDB
Для работы с IndexedDB необходимо получить ссылку. В настоящее время нет единого способа добиться этого. В Chromium вам нужен доступ к window.webkitIndexedDB, а в Firefox вам нужно использовать window.mozIndexedDB .
if ( "webkitIndexedDB" in window ) {
window.indexedDB = window.webkitIndexedDB;
window.IDBTransaction = window.webkitIDBTransaction;
window.IDBTransaction = window.webkitIDBTransaction;
window.IDBKeyRange = window.webkitIDBKeyRange;
} else if ( "moz_indexedDB" in window ) {
window.indexedDB = window.moz_indexedDB;
}
if ( !window.indexedDB ) {
// Browser doesn’t support indexedDB, do something
// clever, and then exit early.
alert("IndexedDB not supported !!!");
}
Создание / Открытие базы данных
Если у вас есть доступ к ссылке на IndexedDB, следующим шагом будет создание или открытие базы данных:
var dbRequest = window.indexedDB.open(
"SimplyWriteDB", // Database ID
"All my SimplyWrities" // Database Description
);
Каждая команда выполняется асинхронно и генерирует объект запроса, в котором вы можете выполнить код для событий «onsuccess» или «onerror».
Инициализация базы данных в первый раз
Используя объект запроса, возвращенный предыдущей командой, мы выполняем следующий код в случае успеха:
dbRequest.onsuccess = function ( e ) {
var db = e.result;
if ( db.version === "" ) {
// Empty string means the database hasn’t been versioned.
var versionRequest = db.setVersion( "1.0" );
versionRequest.onsuccess = function ( e ) {
var store = db.createObjectStore(
"written", // The Object Store’s name
"title", // The name of the property to use as a key
false // Is the key auto-incrementing?
);
};
}
};
Базы данных IndexedDB могут иметь разные версии. Вы можете использовать версию для первоначальной инициализации БД или для обновления структуры базы данных. Например, у вас есть база данных с некоторой структурой в версии 1.0, и вы хотите обновить ее, создав новое хранилище объектов и увеличив номер версии до 2.0.
Добавление, получение и удаление контента
На данный момент у нас есть база данных, созданная с одним хранилищем объектов, которое использует «заголовок» в качестве ключа. Теперь мы можем добавлять и получать к нему контент.
var writeTransaction = dbase.transaction(
["simplywriteOS"], // The Object Stores to lock
IDBTransaction.READ_WRITE, // Lock type (READ_ONLY, READ_WRITE)
0
);
// Open a store and generate a write request:
var store = writeTransaction.objectStore("written");
var writeRequest = store.add( {
"title": this_is_the_title,
"text": this_is_the_text
} );
writeRequest.onerror = function ( e ) {
};
writeRequest.onsuccess = function ( e ) {
};
По сути, нам нужно создать транзакцию базы данных, указать хранилище объектов для использования в транзакции и выполнить действие, такое как добавить, получить или удалить.
Одним из важных действий является перебор всех элементов в хранилище объектов. Вы можете сделать это с помощью курсора:
var readCursor = store.openCursor();
readCursor.onsuccess = function ( e ) {
if ( e.result ) {
console.log(e.result.value.title);
e.result.continue();
} else {
// If the `success` event’s `result` is null, you’ve reached
// the end of the cursor’s list.
}
};
Заключительные слова о SimplyWrite
SimplyWrite написан с использованием HTML и JavaScript (конечно), и я использую несколько других проектов. Я хотел бы отметить использование, в дополнение к jQuery и jQueryUI, двух проектов:
- css3buttons , хороший набор CSS3 для кнопок.
- html5boilerplate Швейцарский нож HTML5.
