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.