Compare commits

...

52 commits

Author SHA1 Message Date
Davide Depau 90aa6eb8cb Update LibreSSL to v2.9.2 2019-07-15 06:41:21 +02:00
Davide Depau 7b234fdc82
Remove github section from FUNDING.yml as I'm still not enabled to receive funding directly 2019-06-17 10:33:50 +02:00
Davide Depau 437690ac39
Create FUNDING.yml 2019-05-23 23:55:24 +02:00
Davide Depau dd3e69ba23
Update README.md 2019-05-18 19:04:40 +02:00
Jakob Senkl e1b82d5fed Update translation (German)
Currently translated at 100.0% (88 of 88 strings)

Translation: EtchDroid/App
Translate-URL: https://etchdroid-l10n.depau.eu/projects/etchdroid/app/de/
2019-05-14 09:43:20 +00:00
Davide Depau ef281536a1
Merge pull request #24 from fyr77/master
Add my full name to translators file
2019-05-13 11:37:43 +02:00
Jakob ddee73b635
Add my full name to translators file 2019-05-13 11:35:52 +02:00
edson luis pauli 4e8c0c423e Add translation (Portuguese (Brazil)) 2019-05-12 03:09:08 +00:00
Carlos Sánchez 7c7ad478d8 Update translation (Spanish)
Currently translated at 100.0% (88 of 88 strings)

Translation: EtchDroid/App
Translate-URL: https://etchdroid-l10n.depau.eu/projects/etchdroid/app/es/
2019-05-08 17:43:15 +00:00
Davide Depau 660cf75d62 Add translation (Spanish) 2019-05-06 12:07:04 +00:00
Davide Depau ac39a4e6a9
Add README badges 2019-02-26 11:58:25 +01:00
Davide Depau 055140bb16
Merge branch 'master' of github.com:EtchDroid/EtchDroid 2019-02-26 11:44:23 +01:00
Davide Depau 5e6146908e
Fix Gradle wrapper 2019-02-26 11:44:08 +01:00
Jakob Senkl fe3f26a92f Update translation (German)
Currently translated at 100.0% (88 of 88 strings)

Translation: EtchDroid/App
Translate-URL: https://etchdroid-l10n.depau.eu/projects/etchdroid/app/de/
2019-02-26 10:32:47 +00:00
Davide Depau 525311b02c Add page for people who think EtchDroid is breaking USB drives 2019-02-20 22:35:24 +01:00
Davide Depau c4011d202a Update translation (Italian)
Currently translated at 100.0% (88 of 88 strings)

Translation: EtchDroid/App
Translate-URL: https://etchdroid-l10n.depau.eu/projects/etchdroid/app/it/
2019-02-17 22:25:12 +00:00
Davide Depau 2836c31d2d
Mark app name as non translatable 2019-02-17 23:21:17 +01:00
Davide Depau e5b62be7a7
Merge branch 'master' of github.com:EtchDroid/EtchDroid 2019-02-17 23:18:36 +01:00
Davide Depau 8b8e5d367c Mark not translatable strings as such 2019-02-17 23:17:47 +01:00
Yassine Imounachen 84e55cc44f Update translation (French)
Currently translated at 98.6% (137 of 139 strings)

Translation: EtchDroid/App
Translate-URL: https://etchdroid-l10n.depau.eu/projects/etchdroid/app/fr/
2019-02-09 12:42:28 +00:00
Davide Depau 54c54972e8
Merge pull request #19 from yassineim/patch-1
Add myself to the list of translators
2019-02-09 13:33:19 +01:00
Yassine Imounachen 86e28e2292
Add myself to the translators 2019-02-08 21:55:19 +00:00
Davide Depau 32925f3adb Add translation (French) 2019-02-08 10:28:23 +00:00
Davide Depau a33eef00d9 Translated using Weblate (Italian)
Currently translated at 84.2% (117 of 139 strings)

Translation: EtchDroid/App
Translate-URL: https://etchdroid-l10n.depau.eu/projects/etchdroid/app/it/
2019-02-07 22:02:55 +00:00
Davide Depau d099f30e70 Move all strings to main file, use references in strings-night 2019-02-07 20:17:50 +01:00
Davide Depau 4a9278f9e4
Update Gradle and libraries 2019-02-07 19:56:38 +01:00
Davide Depau bb245efc6f
Credit @fyr77 in About activity for German translation 2019-02-07 19:54:00 +01:00
fyr77 c07655d5eb
add german translation 2019-02-07 19:54:00 +01:00
Davide Depau b286782a79
Revert unwanted change to strings 2018-12-21 19:59:26 +01:00
Taco 1faa81cba4
Fix some English strings
Signed-off-by: Taco <SkytkRSfan3895@gmail.com>
2018-12-21 19:58:08 +01:00
Taco 2074390179
use property access syntax, join declaration and assignment in DoNotShowAgainDialogFragment, and other small misc changes
Signed-off-by: Taco <SkytkRSfan3895@gmail.com>
2018-12-21 19:57:40 +01:00
Taco b457ed7571
Update some dependencies and add some androidx deps
Signed-off-by: Taco <SkytkRSfan3895@gmail.com>
2018-12-21 19:56:49 +01:00
Davide Depau 180a483861
Add cookie banner 2018-12-09 02:11:52 +01:00
Davide Depau ef769053ad
Add Matomo analytics code 2018-12-09 01:50:27 +01:00
Davide Depau 5d2c679973
Remove http link 2018-12-04 19:45:50 +01:00
Davide Depau 3a68582570
Update README.md 2018-12-04 19:45:31 +01:00
Davide Depau 0e3f814108
Version v1.3.31 2018-12-04 12:20:02 +01:00
Davide Depau 41a7b814a1
Add "buy me a coffee" button because I'm broke af lol 2018-12-04 12:18:53 +01:00
Davide Depau 38eee00a62
Fix README links 2018-12-04 12:07:20 +01:00
Davide Depau d363400d6e
Add repo link to sidebar 2018-12-04 12:05:29 +01:00
Davide Depau da72229af5
Update README.md 2018-12-04 12:04:20 +01:00
Davide Depau 63ae2703e4
Update donations page 2018-12-04 12:02:21 +01:00
Davide Depau 007bfd31f0
Update website 2018-12-04 01:22:11 +01:00
Davide Depau dc0f5da652
Version v1.3.3 2018-12-03 15:01:34 +01:00
Davide Depau 751a1ce3be
Switch to Attribouter licenses activity 2018-12-03 14:58:28 +01:00
Davide Depau feec3ec45d
Merge branch 'master' of github.com:Depau/EtchDroid 2018-12-03 11:48:35 +01:00
Davide Depau e3a5561561
Fix LibreSSL build 2018-12-03 11:48:04 +01:00
Davide Depau bd55523d27
Merge pull request #11 from Exodus1831/master
Turkish translation of the app.
2018-12-02 21:53:06 +02:00
Can 76bc4eac83 Turkish Translation 2018-12-02 22:40:38 +03:00
Davide Depau 5bb19efeca
Version 1.3.2 2018-11-19 03:22:59 +01:00
Davide Depau 443eff28f3
Update appcompat 2018-11-19 03:03:42 +01:00
Davide Depau 691bddcc00
Fix onButtonClick bug on Android 6.0 2018-11-19 03:03:13 +01:00
176 changed files with 38010 additions and 181 deletions

5
.github/FUNDING.yml vendored Normal file
View file

@ -0,0 +1,5 @@
# These are supported funding model platforms
#github: [Depau]
patreon: depau
custom: https://etchdroid.depau.eu/donate/

2
.gitmodules vendored
View file

@ -9,4 +9,4 @@
url = https://github.com/LuaDist/bzip2.git
[submodule "app/src/c/libressl"]
path = dmg2img/src/c/libressl
url = https://github.com/libressl-portable/portable.git
url = https://github.com/Depau/libressl.git

View file

@ -1,13 +1,22 @@
# EtchDroid
[![F-Droid](docs/img/get-from-fdroid-small.png)](https://f-droid.org/packages/eu.depau.etchdroid/) [![Google Play](docs/img/get-from-googleplay-small.png)](https://play.google.com/store/apps/details?id=eu.depau.etchdroid)
![GitHub tag (latest SemVer)](https://img.shields.io/github/tag/EtchDroid/EtchDroid.svg?label=latest) [![Translation status](https://etchdroid-l10n.depau.eu/widgets/etchdroid/-/app/svg-badge.svg)](https://etchdroid-l10n.depau.eu/engage/etchdroid/?utm_source=widget) ![License](https://img.shields.io/github/license/EtchDroid/EtchDroid.svg) ![GitHub stars](https://img.shields.io/github/stars/EtchDroid/EtchDroid.svg?style=social)
![EtchDroid](docs/img/playstore_banner.png)
[![F-Droid](docs/assets/img/get-from-fdroid-small.png)](https://f-droid.org/packages/eu.depau.etchdroid/) [![Google Play](docs/assets/img/get-from-googleplay-small.png)](https://play.google.com/store/apps/details?id=eu.depau.etchdroid)
## Update on development status
On my blog: https://blog.depau.eu/2019/05/18/etchdroid-development-update/
![EtchDroid](docs/assets/img/playstore_banner.png)
EtchDroid is an open-source application that helps you write images to USB drives, no root required.
You can use it to make a bootable GNU/Linux USB drive when your laptop is dead and you're in the middle of nowhere.
<p align="center">
<a href="https://www.patreon.com/depau" rel="_noopener" target="_blank"><img alt="Become a Patron" src="docs/assets/img/become_a_patron_button.png"/></a> &nbsp;&nbsp;&nbsp; <a href="https://flattr.com/@Depau" rel="_noopener" target="_blank"><img alt="Flattr this" src="https://api.flattr.com/button/flattr-badge-large.png"/></a>
</p>
## Features
- Supports raw disk images and most GNU/Linux distributions ISOs
- Supports most DMG disk images (beta)
@ -27,10 +36,9 @@ You can use it to make a bootable GNU/Linux USB drive when your laptop is dead a
You can support the development by sending a donation.
- PayPal: https://paypal.me/DavideDepau
- Monero: `82WTvrLEdTbULrcgcUnpuzevHaTMURHQfi4Sf5dG3WLjXzP8NwrfTL82HNdV8gnSN183TnLLsR5Q2YWcNJRriHvPPoweT1Q`
See the website: https://etchdroid.depau.eu/donate/
## FAQ/Common issues
[Link](https://etchdroid.depau.eu/faq)
See the website: https://etchdroid.depau.eu/faq/

View file

@ -6,12 +6,13 @@ apply plugin: 'kotlin-android-extensions'
android {
compileSdkVersion 28
buildToolsVersion '28.0.3'
defaultConfig {
applicationId "eu.depau.etchdroid"
minSdkVersion 19
targetSdkVersion 28
versionCode 5
versionName "1.3.1"
versionCode 8
versionName "1.3.31"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
vectorDrawables.useSupportLibrary = true
}
@ -21,27 +22,33 @@ android {
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
compileOptions {
encoding = 'UTF-8'
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
implementation 'androidx.appcompat:appcompat:1.0.0'
implementation 'androidx.constraintlayout:constraintlayout:2.0.0-alpha2'
implementation 'com.google.android.material:material:1.0.0'
implementation 'androidx.recyclerview:recyclerview:1.0.0'
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version"
implementation 'androidx.appcompat:appcompat:1.1.0-alpha01'
implementation 'androidx.constraintlayout:constraintlayout:2.0.0-alpha3'
implementation 'com.google.android.material:material:1.1.0-alpha03'
implementation 'androidx.recyclerview:recyclerview:1.1.0-alpha02'
implementation 'androidx.gridlayout:gridlayout:1.0.0'
api 'com.google.guava:guava:26.0-android'
implementation 'androidx.core:core:1.1.0-alpha04'
implementation 'androidx.fragment:fragment:1.1.0-alpha03'
implementation 'androidx.swiperefreshlayout:swiperefreshlayout:1.1.0-alpha01'
api 'com.google.guava:guava:27.0.1-android'
api 'com.github.codekidX:storage-chooser:2.0.4.2'
// implementation 'com.github.mjdev:libaums:0.5.5'
implementation project(':libaums')
implementation project(':dmg2img')
implementation 'com.android.support.constraint:constraint-layout:1.1.3'
implementation 'com.android.support:design:28.0.0'
implementation 'com.android.support:appcompat-v7:28.0.0'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'androidx.test:runner:1.1.0-alpha4'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.0-alpha4'
implementation 'me.jfenn:Attribouter:0.1.5'
testImplementation 'junit:junit:4.13-beta-1'
androidTestImplementation 'androidx.test:runner:1.1.1'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.1'
}

View file

@ -30,11 +30,6 @@
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
<activity
android:name=".activities.LicensesActivity"
android:label="@string/licenses"
android:theme="@style/MaterialAppTheme">
</activity>
<activity
android:name=".activities.UsbDrivePickerActivity"
android:label="@string/title_activity_usb_drive_picker"

View file

@ -1,7 +1,6 @@
package eu.depau.etchdroid.activities
import android.Manifest
import android.content.Intent
import android.content.pm.PackageManager
import android.os.Build
import android.os.Bundle
@ -14,6 +13,9 @@ import eu.depau.etchdroid.R
import eu.depau.etchdroid.kotlin_exts.toast
import eu.depau.etchdroid.utils.DoNotShowAgainDialogFragment
import eu.depau.etchdroid.utils.NightModeHelper
import me.jfenn.attribouter.Attribouter
import android.content.Intent
import android.net.Uri
abstract class ActivityBase : AppCompatActivity() {
@ -80,12 +82,16 @@ abstract class ActivityBase : AppCompatActivity() {
}
override fun onOptionsItemSelected(item: MenuItem): Boolean {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
return when (item.itemId) {
R.id.action_licenses -> {
val intent = Intent(this, LicensesActivity::class.java)
R.id.action_about -> {
Attribouter
.from(this)
.withFile(R.xml.about)
.show()
return true
}
R.id.action_donate -> {
val intent = Intent(Intent.ACTION_VIEW, Uri.parse("https://etchdroid.depau.eu/donate/"))
startActivity(intent)
return true
}

View file

@ -56,6 +56,8 @@ class ConfirmationActivity : ActivityBase() {
setContentView(R.layout.activity_confirmation)
actionBar?.setDisplayHomeAsUpEnabled(true)
confirm_fab.setOnClickListener(this::onButtonClicked)
// displayImageLayout must be called before displayDetails
// to ensure uncompressed image size is available
displayImageLayout()
@ -93,7 +95,7 @@ class ConfirmationActivity : ActivityBase() {
for (trial in 0..1) {
try {
StateKeeper.usbMassStorageDevice!!.init()
val blockDev = StateKeeper.usbMassStorageDevice?.blockDevice
val blockDev = StateKeeper.usbMassStorageDevice!!.blockDevice
if (blockDev != null) {
val devSize = (blockDev.size.toLong() * blockDev.blockSize.toLong())
@ -176,7 +178,7 @@ class ConfirmationActivity : ActivityBase() {
else
startService(intent)
moveTaskToBack(true);
moveTaskToBack(true)
finish()
}

View file

@ -12,6 +12,7 @@ import eu.depau.etchdroid.R
import eu.depau.etchdroid.StateKeeper
import eu.depau.etchdroid.enums.FlashMethod
import eu.depau.etchdroid.utils.DoNotShowAgainDialogFragment
import kotlinx.android.synthetic.main.activity_start.*
import java.io.File
@ -34,6 +35,8 @@ class StartActivity : ActivityBase() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_start)
btn_image_raw.setOnClickListener(this::onButtonClicked)
btn_image_dmg.setOnClickListener(this::onButtonClicked)
}
fun onButtonClicked(view: View) = onButtonClicked(view, true)
@ -80,7 +83,7 @@ class StartActivity : ActivityBase() {
FlashMethod.FLASH_API -> {
val intent = Intent(Intent.ACTION_OPEN_DOCUMENT)
intent.addCategory(Intent.CATEGORY_OPENABLE)
intent.setType("*/*");
intent.type = "*/*"
startActivityForResult(intent, READ_REQUEST_CODE)
}
FlashMethod.FLASH_DMG_API -> {

View file

@ -1,3 +1,3 @@
package eu.depau.etchdroid.enums
enum class PartitionType {}
enum class PartitionType

View file

@ -16,12 +16,11 @@ class DoNotShowAgainDialogFragment(nightMode: Boolean) : DialogFragment() {
var negativeButton: String? = null
var message: String? = null
var listener: DialogListener? = null
val dialogTheme: Int
val dialogTheme: Int = if (nightMode) R.style.DialogThemeDark else R.style.DialogThemeLight
constructor() : this(false)
init {
dialogTheme = if (nightMode) R.style.DialogThemeDark else R.style.DialogThemeLight
setStyle(DialogFragment.STYLE_NORMAL, dialogTheme)
}

View file

@ -0,0 +1,11 @@
<vector android:height="24dp" android:viewportHeight="48"
android:viewportWidth="48" android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillAlpha="1" android:fillColor="#000000"
android:pathData="M8,20.0449C7.7923,20.0449 7.5902,20.0656 7.3945,20.1055C6.8076,20.225 6.2836,20.5152 5.877,20.9219C5.4703,21.3286 5.18,21.8506 5.0605,22.4375C5.0207,22.6331 5,22.8372 5,23.0449L5,30.0449L5,42.2754L5,43.0449C5,43.6682 5.1889,44.246 5.5117,44.7246C6.0498,45.5224 6.9612,46.0449 8,46.0449L40,46.0449C41.0387,46.0449 41.9502,45.5224 42.4883,44.7246C42.5959,44.5651 42.6899,44.3944 42.7656,44.2148C42.917,43.8557 43,43.4604 43,43.0449L43,42.2754L43,36.0449L43,23.8125L43,23.0449C43,22.6294 42.917,22.2342 42.7656,21.875C42.6899,21.6954 42.5959,21.5248 42.4883,21.3652C41.9502,20.5675 41.0387,20.0449 40,20.0449L8,20.0449zM24,22.5254A10.5182,10.5182 0,0 1,34.5176 33.0449A10.5182,10.5182 0,0 1,24 43.5625A10.5182,10.5182 0,0 1,13.4824 33.0449A10.5182,10.5182 0,0 1,24 22.5254zM24,24.4492A8.5958,8.5958 0,0 0,15.4043 33.0449A8.5958,8.5958 0,0 0,24 41.6406A8.5958,8.5958 0,0 0,32.5957 33.0449A8.5958,8.5958 0,0 0,24 24.4492zM24,26.75C27.434,26.75 30.25,29.566 30.25,33C30.25,36.434 27.434,39.25 24,39.25C21.0479,39.25 18.5583,37.1661 17.916,34.4004L21.0703,34.4004C21.5888,35.4973 22.6926,36.25 24,36.25C25.8127,36.25 27.25,34.8127 27.25,33C27.25,31.1873 25.8127,29.75 24,29.75C22.7748,29.75 21.734,30.415 21.1797,31.4004L17.9668,31.4004C18.6802,28.7347 21.1193,26.75 24,26.75z"
android:strokeAlpha="1" android:strokeColor="#00000000"
android:strokeLineCap="round" android:strokeLineJoin="miter" android:strokeWidth="1.89999998"/>
<path android:fillAlpha="1" android:fillColor="#000000"
android:pathData="M2.3379,1.5254C1.8997,1.5254 1.378,1.6672 1.5137,2.3242C1.6007,2.7458 4.4144,6.2239 5.4434,7.4902C5.2677,7.7794 5.1304,8.0942 5.0605,8.4375C5.0207,8.6331 5,8.8372 5,9.0449L5,9.582L5,12.0449L5,13.0449L5,15.5059L5,16.0449C5,16.6682 5.1889,17.246 5.5117,17.7246C6.0498,18.5224 6.9612,19.0449 8,19.0449L40,19.0449C41.0387,19.0449 41.9502,18.5224 42.4883,17.7246C42.5959,17.5651 42.6899,17.3944 42.7656,17.2148C42.8413,17.0353 42.8996,16.846 42.9395,16.6504C42.9793,16.4547 43,16.2527 43,16.0449L43,15.5059L43,13.0449L43,12.0449L43,9.582L43,9.0449C43,8.8372 42.9793,8.6331 42.9395,8.4375C42.8696,8.0942 42.7323,7.7794 42.5566,7.4902C43.5856,6.2239 46.3993,2.7458 46.4863,2.3242C46.622,1.6672 46.1003,1.5254 45.6621,1.5254C45.1945,1.5396 44.8462,1.9932 44.5859,2.2832L41.3984,6.4023C40.9796,6.1808 40.5086,6.0449 40,6.0449L8,6.0449C7.7923,6.0449 7.5902,6.0656 7.3945,6.1055C7.1989,6.1453 7.0097,6.2036 6.8301,6.2793C6.7496,6.3132 6.6782,6.3618 6.6016,6.4023L3.4141,2.2832C3.1538,1.9932 2.8055,1.5396 2.3379,1.5254zM14.375,9.75A3.375,3.375 0,0 1,17.75 13.125A3.375,3.375 0,0 1,14.375 16.5A3.375,3.375 0,0 1,11 13.125A3.375,3.375 0,0 1,14.375 9.75zM33.875,9.75A3.375,3.375 0,0 1,37.25 13.125A3.375,3.375 0,0 1,33.875 16.5A3.375,3.375 0,0 1,30.5 13.125A3.375,3.375 0,0 1,33.875 9.75z"
android:strokeAlpha="1" android:strokeColor="#00000000"
android:strokeLineCap="round" android:strokeLineJoin="miter" android:strokeWidth="1.89999998"/>
</vector>

View file

@ -215,7 +215,6 @@
android:layout_marginBottom="8dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
android:onClick="onButtonClicked"
app:srcCompat="@drawable/ic_twotone_save_alt_24px"/>
</androidx.constraintlayout.widget.ConstraintLayout>

View file

@ -38,8 +38,7 @@
android:layout_width="match_parent"
android:layout_height="match_parent"
android:theme="@style/CardContentStyle"
android:foreground="?attr/selectableItemBackground"
android:onClick="onButtonClicked">
android:foreground="?attr/selectableItemBackground">
<ImageView
android:id="@+id/imageView"
@ -102,8 +101,7 @@
android:layout_width="match_parent"
android:layout_height="match_parent"
android:theme="@style/CardContentStyle"
android:foreground="?attr/selectableItemBackground"
android:onClick="onButtonClicked">
android:foreground="?attr/selectableItemBackground">
<ImageView
android:id="@+id/imageView2"

View file

@ -3,9 +3,15 @@
xmlns:tools="http://schemas.android.com/tools"
tools:context="eu.depau.etchdroid.activities.StartActivity">
<item
android:id="@+id/action_licenses"
android:id="@+id/action_about"
android:orderInCategory="100"
android:title="@string/licenses"
android:title="@string/about"
app:showAsAction="never"/>
<item
android:id="@+id/action_donate"
android:orderInCategory="100"
android:title="@string/buy_me_a_coffee"
app:showAsAction="never"/>
<item

View file

@ -0,0 +1,168 @@
<?xml version='1.0' encoding='UTF-8'?>
<resources>
<string name="app_name">EtchDroid</string>
<string name="flash_dd_usb_api">Abbild direkt auf Datenträger schreiben (mithilfe der Android API)</string>
<string name="flash_dmg_api">macOS DMG Abbild auf Datenträger wiederherstellen (mithilfe der Android API)</string>
<string name="flash_unetbootin">Flash im Unetbootin-Stil (nur MBR, benötigt root)</string>
<string name="flash_woeusb">Windows Abbild schreiben (mithilfe von WoeUSB, benötigt root)</string>
<string name="action_refresh">Aktualisieren</string>
<string name="usb_perm_denied">Zugriff verweigert für</string>
<string name="usb_perm_denied_noname">Zugriff auf USB-Gerät verweigert</string>
<string name="selected_image">Ausgewähltes Abbild:</string>
<string name="selected_method">Ausgewählte Schreibmethode:</string>
<string name="selected_usbdev">Ausgewähltes USB-Gerät:</string>
<string name="unknown_filename">Unbekannter Dateiname</string>
<string name="image_bigger_than_usb">Abbild ist größer als USB-Gerät, kann daher nicht geschrieben werden</string>
<string name="cant_read_usbdev">Kann USB-Gerät nicht lesen</string>
<string name="tap_next_to_write">Tippen, um Abbild auf USB-Datenträger zu schreiben</string>
<string name="notchan_writestatus_title">USB Schreibstatus</string>
<string name="notchan_writestatus_desc">Zeigt den Status der Abbilder an, die auf USB-Datenträger geschreiben werden</string>
<string name="notif_initializing">Initialisierung…</string>
<string name="notif_writing_img">Schreibt Abbild…</string>
<string name="image_is_not_dmg">Ausgewähltes Abbild ist kein DMG Abbild (vielleicht ist es beschädigt)</string>
<string name="ptt_aix">IBM AIX</string>
<string name="ptt_amiga">AMIGA</string>
<string name="ptt_bsd">BSD</string>
<string name="ptt_dvh">DVH</string>
<string name="ptt_gpt">GUID Partitionstabelle (GPT)</string>
<string name="ptt_loop">Keiner</string>
<string name="ptt_mac">Apple Partitionstabelle (APT)</string>
<string name="ptt_msdos">Master Boot Record (MSDOS)</string>
<string name="ptt_pc98">PC98</string>
<string name="ptt_sun">Sun</string>
<string name="fs_fat12">FAT12</string>
<string name="fs_fat16">FAT16</string>
<string name="fs_fat32">FAT32</string>
<string name="fs_exfat">ExFAT</string>
<string name="fs_ntfs">NTFS</string>
<string name="fs_refs">ReFS</string>
<string name="fs_hfs">macOS HFS</string>
<string name="fs_hfsplus">macOS HFS+</string>
<string name="fs_apfs">Apple Filesystem (APFS)</string>
<string name="fs_apt_data">APT-Daten</string>
<string name="fs_iso9660">ISO 9660</string>
<string name="fs_ext2">Linux Ext2</string>
<string name="fs_ext3">Linux Ext3</string>
<string name="fs_ext4">Linux Ext4</string>
<string name="fs_btrfs">Btrfs</string>
<string name="fs_f2fs">f2fs</string>
<string name="fs_luks">LUKS verschlüsselt</string>
<string name="fs_linux_swap">Linux swap</string>
<string name="fs_linux_lvm_pv">Linux LVM2 physischer Datenträger</string>
<string name="fs_ufs">UFS</string>
<string name="fs_xfs">XFS</string>
<string name="fs_zfs">ZFS</string>
<string name="fs_free">Freier Platz</string>
<string name="fs_unformatted">Unformatiert</string>
<string name="fs_unknown">Unbekannt</string>
<string name="part_label">Name</string>
<string name="fs_label">Beschriftung</string>
<string name="fs_type">Typ</string>
<string name="part_size">Größe</string>
<string name="license_gpl3">GNU GPLv3</string>
<string name="this_app">Diese app</string>
<string name="license_apache2_0">Apache 2.0</string>
<string name="libaums_license_desc">Userspace USB Block Gerät Implementation</string>
<string name="license_gpl2">GNU GPLv2</string>
<string name="license_bzip2">BSD-ähnlich</string>
<string name="license_custom">personalisierte</string>
<string name="about">Über</string>
<string name="dmg2img_license_desc">Kovertiert komprimierte Apple® DMG Abbilder</string>
<string name="title_activity_usb_drive_picker">USB-Gerät auswählen</string>
<string name="title_activity_confirmation">Bereit zum Schreiben</string>
<string name="cannot_write">Abbild kann nicht auf USB-Datenträger geschrieben werden</string>
<string name="check_notification_progress">Für Fortschritt Benachrichtigung überprüfen</string>
<string name="partition_table_title">Partitionstabelle:</string>
<string name="could_not_access_usb_error">Auf das USB-Gerät kann nicht zugegriffen werden. Vielleicht wurde die App bereits ausgeführt und ist abgestürzt? USB-Datenträger entfernen und erneut anschließen, danach die App neu starten.</string>
<string name="write_image_or_iso">Raw-Abbild oder ISO</string>
<string name="raw_image_desc">Gut für GNU/Linux distro ISOs, Raspberry Pi Abbilder und Datenträgerabbilder, die auf Windows oder Linux erstellt wurden.</string>
<string name="write_apple_dmg">Apple® DMG Abbilder schreiben</string>
<string name="dmg_image_desc">Abbild wiederherstellen, welches mit dem macOS Festplattendienstprogramm erstellt wurde</string>
<string name="no_usb_drives_detected">Keine USB-Datenträger erkannt.\nEs ist anzumerken, dass für SD-Karten ein SD zu USB Adapter benötigt wird.</string>
<string name="do_not_show_again">Nicht erneut anzeigen</string>
<string name="here_be_dragons">Hier seien Drachen</string>
<string name="i_understand">Ich verstehe</string>
<string name="dmg_alert_dialog_text">In den meisten Fällen können DMG Abbilder gut wiederhergestellt werden, aber manchmal könnten Probleme auftreten. Dies ist eine Warnung.</string>
<string name="confirm_flash_image">Abbild flashen</string>
<string name="dataloss_confirmation_dialog_message">Wenn du fortfährst, wird das ausgewählte Abbild geschrieben und alle Daten auf dem USB-Datenträger gehen für immer verloren.</string>
<string name="warning">Warnung</string>
<string name="cancel">Abbrechen</string>
<string name="license_mpl_2_0">MPL-2.0</string>
<string name="storagechooser_license_description">DMG Dateiwähler</string>
<string name="result_channel_desc">Zeigt das Ergebnis einer fertigen Schreiboperation an</string>
<string name="result_channel_name">USB Schreibergebnis Benachrichtigungen</string>
<string name="write_failed_tap_for_info">Schreiben fehlgeschlagen • Tippen für Info</string>
<string name="write_finished">Schreiben abgeschlossen</string>
<string name="error_notif_content_text">%1$s wurde möglicherweise beim Schreiben ausgesteckt.</string>
<string name="success_notif_content_text">%1$s wurde erfolgreich auf %2$s geschrieben</string>
<string name="troubleshooting_info">Informationen zur Fehlerbehebung</string>
<string name="operation_failed_because">Die Operation konnte nicht fertiggestellt werden, da der folgende Fehler aufgetreten ist:</string>
<string name="troubleshoot_sock_op_on_non_sock">Dies ist ein häufiger Fehler. Er passiert normalerweise, wenn der USB-Datenträger während des Schreibens entfernt wird, oder wenn er mit einem USB-Hub verbunden ist. Auf manchen Geräten existiert möglicherweise ein Bug im USB-Subsystem von Android: ein Neustart des Geräts sollte es für einige Zeit beheben.
\n
\nVersuche folgendes:
\n• USB-Gerät abstecken und wieder anstecken, dann die App neu starten
\n• Gerät neu starten (ernsthaft, versuche es)
\n• Anderes USB-Gerät ausprobieren
\n• Unnötige Adapter und Hubs vermeiden
\n• Vermeide, dein Smart-Gerät während des Schreibens zu benutzen
\n• Defekte USB-Adapter austauschen
\n
\nWenn das Problem weiterhin auftritt, reiche bitte ein Issue auf GitHub ein.</string>
<string name="reporting_issues">Probleme melden</string>
<string name="reporting_issues_text">Probleme können auf Github gemeldet werden:\nhttps://github.com/Depau/EtchDroid/issues</string>
<string name="write_failed">Schreiben fehlgeschlagen</string>
<string name="unknown_error">Unbekannter Fehler. Versuche, den USB-Datenträger erneut anzuschließen oder starte das Gerät neu. Bitte reiche ein Issue auf GitHub ein.</string>
<string name="uncompressed">(unkomprimiert)</string>
<string name="nightmode">Nachtmodus aktivieren</string>
<string name="nightmode_night">Nachtmodus deaktivieren</string>
<string name="android_pie_bug">Android Pie Bug</string>
<string name="android_pie_bug_dialog_text">Es gibt einen Fehler in Android 9, welcher manchmal Schreibfehler verursacht.\nWenn \"Schreiben fehlgeschlagen\" gemeldet wird, starte das Gerät neu und versuche es nochmal.</string>
<string name="reset_warnings">Alle Warnungen zurücksetzen</string>
<string name="warnings_reset">Alle Warnungen und Dialoge wiederhergestellt</string>
<string name="file_type_not_supported">Dateityp nicht unterstützt</string>
<string name="cannot_find_file_in_storage">Datei kann im internen Speicher nicht gefunden werden. Versuche es innerhalb der App zu öffnen.</string>
<string name="storage_permission_required">Speicherberechtigung ist notwendig, um DMG Abbilder zu lesen</string>
<!-- AndroidX Jetpack -->
<string name="define_AndroidX" translatable="false"/>
<string name="library_AndroidX_author" translatable="false">AOSP</string>
<string name="library_AndroidX_authorWebsite" translatable="false">https://developer.android.com</string>
<string name="library_AndroidX_libraryName" translatable="false">AndroidX Jetpack</string>
<string name="library_AndroidX_libraryDescription">AndroidX ist eine neue Version der originalen Android Unterstützungs-Bibliothek und gewährleistet Abwärtskompatibilität mit früheren Android-Versionen</string>
<string name="library_AndroidX_libraryWebsite">https://developer.android.com/jetpack/androidx/</string>
<string name="library_AndroidX_libraryVersion">1.0.1</string>
<string name="library_AndroidX_isOpenSource">true</string>
<string name="library_AndroidX_repositoryLink">https://android.googlesource.com/platform/frameworks/support/+/androidx-master-dev/</string>
<string name="library_AndroidX_licenseId" translatable="false">apache_2_0</string>
<!-- Kotlin Standard Library -->
<string name="define_KotlinStdlib"/>
<string name="library_KotlinStdlib_author">JetBrains</string>
<string name="library_KotlinStdlib_authorWebsite">https://kotlinlang.org/</string>
<string name="library_KotlinStdlib_libraryName">Kotlin Standardbibliothek</string>
<string name="library_KotlinStdlib_libraryDescription">The Kotlin Standardbibliothek stellt das Notwendigste zur Verfügung, um mit Kotlin zu arbeiten</string>
<string name="library_KotlinStdlib_libraryWebsite">https://kotlinlang.org/api/latest/jvm/stdlib/index.html</string>
<string name="library_KotlinStdlib_libraryVersion">1.2.71</string>
<string name="library_KotlinStdlib_isOpenSource">true</string>
<string name="library_KotlinStdlib_repositoryLink">https://github.com/JetBrains/kotlin/tree/master/libraries/stdlib</string>
<string name="library_KotlinStdlib_licenseId">apache_2_0</string>
<!-- Material Components -->
<string name="define_Material"/>
<string name="library_Material_author">Google</string>
<string name="library_Material_authorWebsite">https://material.io/develop/</string>
<string name="library_Material_libraryName">Material Components</string>
<string name="library_Material_libraryDescription">Erstelle schöne Produkte, schneller. Material ist ein Designsystem, welches von open-source Code unterstützt wird und Teams beim bauen von digitalen Erfahrungen hilft</string>
<string name="library_Material_libraryWebsite">https://material.io/develop/android/</string>
<string name="library_Material_libraryVersion">1.1.0-alpha01</string>
<string name="library_Material_isOpenSource">true</string>
<string name="library_Material_repositoryLink">https://github.com/material-components/material-components-android</string>
<string name="library_Material_licenseId">apache_2_0</string>
<string name="app_desc">Eine Anwendung, um Systemabbilder auf USB-Datenträger zu schreiben, auf Android und ohne Root-Pflicht.</string>
<string name="buy_me_a_coffee">Kaufe mir einen Kaffee</string>
</resources>

View file

@ -0,0 +1,106 @@
<?xml version='1.0' encoding='UTF-8'?>
<resources><string name="flash_dd_usb_api">Escribir imagen directamente al disco (usando la API de Android)</string>
<string name="flash_dmg_api">Restaurar imagen DMG de macOS al disco (utilizando la API de Android)</string>
<string name="flash_unetbootin">Flash estilo Unetbootin (sólo MBR, requiere root)</string>
<string name="flash_woeusb">Escribir imagen de Windows (usando WoeUSB, requiere root)</string>
<string name="action_refresh">Refrescar</string>
<string name="usb_perm_denied">Permiso denegado para</string>
<string name="usb_perm_denied_noname">Permiso denegado para dispositivo USB</string>
<string name="selected_image">Imagen seleccionada:</string>
<string name="selected_method">Método de escritura seleccionado:</string>
<string name="selected_usbdev">Dispositivo USB seleccionado:</string>
<string name="unknown_filename">Nombre de archivo desconocido</string>
<string name="image_bigger_than_usb">La imagen es más grande que la unidad USB, por lo que no se puede escribir</string>
<string name="cant_read_usbdev">No puede leer el dispositivo USB</string>
<string name="tap_next_to_write">Toque Escribir para escribir la imagen en la unidad USB</string>
<string name="notchan_writestatus_title">Estado de escritura USB</string>
<string name="notchan_writestatus_desc">Se utiliza para mostrar el estado de las imágenes que se escriben en las unidades USB</string>
<string name="notif_initializing">Inicializando…</string>
<string name="notif_writing_img">Escribiendo imagen…</string>
<string name="image_is_not_dmg">La imagen seleccionada no es una imagen DMG (tal vez esté dañada)</string>
<string name="ptt_gpt">Tabla de particiones GUID (GPT)</string>
<string name="ptt_loop">Ninguno</string>
<string name="ptt_mac">Tabla de particiones de Apple (APT)</string>
<string name="fs_apt_data">Datos de APT</string>
<string name="fs_luks">LUKS encriptado</string>
<string name="fs_linux_swap">Intercambio de Linux</string>
<string name="fs_linux_lvm_pv">Volumen físico de Linux LVM2</string>
<string name="fs_free">Espacio libre</string>
<string name="fs_unformatted">Sin formato</string>
<string name="fs_unknown">Desconocido</string>
<string name="part_label">Nombre</string>
<string name="fs_label">Etiqueta</string>
<string name="fs_type">Tipo</string>
<string name="part_size">Tamaño</string>
<string name="this_app">Esta aplicación</string>
<string name="libaums_license_desc">Implementación de dispositivos de bloqueo USB en el espacio de usuario</string>
<string name="license_bzip2" comment="This string must be very short: it is displayed in a small badge and long strings will be truncated">Personalizado como BSD</string>
<string name="license_custom" comment="This string must be very short: it is displayed in a small badge and long strings will be truncated">Personalizado</string>
<string name="about">Acerca de</string>
<string name="dmg2img_license_desc">Convierte imágenes comprimidas de Apple® DMG</string>
<string name="title_activity_usb_drive_picker">Seleccionar unidad USB</string>
<string name="title_activity_confirmation">Listo para escribir</string>
<string name="cannot_write">No se puede escribir la imagen en la unidad USB</string>
<string name="check_notification_progress">Verificar notificación de progreso</string>
<string name="partition_table_title">Tabla de particiones:</string>
<string name="could_not_access_usb_error">No se pudo acceder al dispositivo USB. ¿Quizás ejecutó la aplicación anteriormente y se estrelló\? Retire y vuelva a insertar la unidad USB, luego reinicie la aplicación.</string>
<string name="write_image_or_iso">Escribir imagen cruda o ISO</string>
<string name="raw_image_desc">Bueno para las distribuciones ISO de GNU/Linux, las imágenes de Raspberry Pi y las imágenes de disco creadas en Windows o Linux.</string>
<string name="write_apple_dmg">Escribir imagen DMG de Apple</string>
<string name="dmg_image_desc">Restaurar una imagen creada con macOS Disk Utility</string>
<string name="no_usb_drives_detected">No se detectan unidades USB.
\nTenga en cuenta que necesita un adaptador de tarjeta SD a USB para escribir en tarjetas SD.</string>
<string name="do_not_show_again">No mostrar de nuevo</string>
<string name="here_be_dragons">Aquí hay dragones</string>
<string name="i_understand">Entiendo</string>
<string name="dmg_alert_dialog_text">Aunque en la mayoría de los casos las imágenes DMG se pueden restaurar sin problemas, a veces puede haber inconsistencias. Esto es una advertencia.</string>
<string name="confirm_flash_image">Flashear imagen</string>
<string name="dataloss_confirmation_dialog_message">Si continúa, se escribirá la imagen seleccionada y todos los datos almacenados en la unidad USB se perderán para siempre.</string>
<string name="warning">Advertencia</string>
<string name="cancel">Cancelar</string>
<string name="storagechooser_license_description">Selector de archivos DMG</string>
<string name="result_channel_desc">Se utiliza para visualizar el resultado de una operación de escritura finalizada</string>
<string name="result_channel_name">Notificaciones de resultados de escritura USB</string>
<string name="write_failed_tap_for_info">Escritura fallida • Toque para obtener información</string>
<string name="write_finished">Escritura finalizada</string>
<string name="error_notif_content_text">Es posible que se haya desconectado %1$s mientras escribía.</string>
<string name="success_notif_content_text">%1$s escrito con éxito a %2$s</string>
<string name="troubleshooting_info">Información para solucionar problemas</string>
<string name="operation_failed_because">La operación no pudo completarse porque se produjo el siguiente error:</string>
<string name="troubleshoot_sock_op_on_non_sock">Este es un error común. Por lo general, esto sucede cuando la unidad USB está desconectada mientras se está escribiendo, o cuando está conectada a través de un concentrador USB. En algunos dispositivos puede haber un error en el subsistema USB de Android: normalmente un reinicio lo arreglará durante algún tiempo.
\n
\nPruebe esto:
\n• Desconecte y vuelva a conectar el dispositivo USB, a continuación, reinicie la aplicación.
\n• Reinicie su dispositivo (realmente probarlo)
\n• Pruebe otra unidad USB
\n• Evite el uso de adaptadores, llaves o hubs innecesarios
\n• Evite usar el teléfono mientras se escribe
\n• Reemplace los adaptadores USB On-The-Go defectuosos
\n
\nSi el problema persiste, por favor envíe un mensaje en GitHub.</string>
<string name="reporting_issues">Reportando problemas</string>
<string name="reporting_issues_text">Los problemas pueden ser reportados en GitHub:
\nhttps://github.com/Depau/EtchDroid/issues</string>
<string name="write_failed">Escritura fallida</string>
<string name="unknown_error">Error desconocido. Intente volver a conectar la unidad USB o reiniciar el dispositivo. Por favor, envíe un mensaje a GitHub.</string>
<string name="uncompressed">(sin comprimir)</string>
<string name="nightmode">Activar modo nocturno</string>
<string name="nightmode_night">Desactivar el modo nocturno</string>
<string name="android_pie_bug">Bug de Android Pie</string>
<string name="android_pie_bug_dialog_text">Hay un error en Android 9 que hace que algunas escrituras fallen.
\nSi dice \"Escritura fallida\", reinicie el dispositivo e inténtelo de nuevo.</string>
<string name="reset_warnings">Reiniciar todas las advertencias</string>
<string name="warnings_reset">Todos los diálogos de advertencia restaurados</string>
<string name="file_type_not_supported">Tipo de archivo no soportado</string>
<string name="cannot_find_file_in_storage">No se puede encontrar el archivo en el almacenamiento interno. Intenta abrirlo desde dentro de la aplicación.</string>
<string name="storage_permission_required">Se requiere permiso de almacenamiento para leer las imágenes DMG</string>
<string name="library_AndroidX_libraryDescription">AndroidX es una importante mejora de la biblioteca de asistencia técnica de Android original y ofrece compatibilidad con versiones anteriores en todas las versiones de Android</string>
<string name="library_KotlinStdlib_libraryName">Biblioteca estándar de Kotlin</string>
<string name="library_KotlinStdlib_libraryDescription">La biblioteca estándar de Kotlin proporciona elementos esenciales para el trabajo diario con Kotlin</string>
<string name="library_Material_libraryDescription">Haga productos hermosos, más rápido. Material es un sistema de diseño, respaldado por código abierto, que ayuda a los equipos a construir experiencias digitales</string>
<string name="app_desc">Una aplicación para escribir imágenes de sistema operativo a unidades USB, en Android, sin necesidad de root.</string>
<string name="buy_me_a_coffee">Cómprame un café</string>
</resources>

View file

@ -0,0 +1,158 @@
<?xml version='1.0' encoding='UTF-8'?>
<resources><string name="app_name">EtchDroid</string>
<string name="flash_dd_usb_api">Écrire l\'image directement sur le disque (en utilisant l\'API Android)</string>
<string name="flash_dmg_api">Restauration d\'une image DMG macOS sur le disque (en utilisant l\'API Android)</string>
<string name="flash_unetbootin">Flash style Unetbootin (MBR uniquement, nécessite le root)</string>
<string name="flash_woeusb">Écrire une image Windows (en utilisant WoeUSB, nécessite le root)</string>
<string name="action_refresh">Rafraîchir</string>
<string name="usb_perm_denied">Autorisation refusée pour</string>
<string name="usb_perm_denied_noname">Autorisation refusée pour le périphérique USB</string>
<string name="selected_image">Image sélectionnée :</string>
<string name="selected_method">Méthode d\'écriture sélectionnée :</string>
<string name="selected_usbdev">Périphérique USB sélectionné :</string>
<string name="unknown_filename">Nom de fichier inconnu</string>
<string name="image_bigger_than_usb">Image plus large que la clé USB, écriture impossible</string>
<string name="cant_read_usbdev">Impossible de lire depuis le périphérique USB</string>
<string name="tap_next_to_write">Sélectionnez \"Écrire\" pour écrire l\'image sur le périphérique USB</string>
<string name="notchan_writestatus_title">État d\'écriture sur l\'USB</string>
<string name="notchan_writestatus_desc">Utilisé pour afficher l\'état d\'avancement de l\'écriture sur les périphériques USB</string>
<string name="notif_initializing">Initialisation…</string>
<string name="notif_writing_img">Écriture de l\'image…</string>
<string name="image_is_not_dmg">L\'image sélectionnée n\'est pas une image DMG valide (elle est peut être corrompue)</string>
<string name="ptt_aix">IBM AIX</string>
<string name="ptt_amiga">AMIGA</string>
<string name="ptt_bsd">BSD</string>
<string name="ptt_dvh">DVH</string>
<string name="ptt_gpt">Table de partitions GUID (GPT)</string>
<string name="ptt_loop">Aucun</string>
<string name="ptt_mac">Table de partitions Apple (APT)</string>
<string name="ptt_msdos">Master Boot Record (MS-DOS)</string>
<string name="ptt_pc98">PC98</string>
<string name="ptt_sun">Sun</string>
<string name="fs_fat12">FAT12</string>
<string name="fs_fat16">FAT16</string>
<string name="fs_fat32">FAT32</string>
<string name="fs_exfat">ExFAT</string>
<string name="fs_ntfs">NTFS</string>
<string name="fs_refs">ReFS</string>
<string name="fs_hfs">macOS HFS</string>
<string name="fs_hfsplus">macOS HFS+</string>
<string name="fs_apfs">Système de fichiers Apple (APFS)</string>
<string name="fs_apt_data">Données APT</string>
<string name="fs_iso9660">ISO 9660</string>
<string name="fs_ext2">Linux ext2</string>
<string name="fs_ext3">Linux ext3</string>
<string name="fs_ext4">Linux Ext4</string>
<string name="fs_btrfs">Btrfs</string>
<string name="fs_f2fs">f2fs</string>
<string name="fs_luks">Cryptage LUKS</string>
<string name="fs_linux_swap">Linux swap</string>
<string name="fs_linux_lvm_pv">Linux volume physique LVM2</string>
<string name="fs_ufs">UFS</string>
<string name="fs_xfs">XFS</string>
<string name="fs_zfs">ZFS</string>
<string name="fs_free">Espace libre</string>
<string name="fs_unformatted">Non formaté</string>
<string name="fs_unknown">Inconnu</string>
<string name="part_label">Nom</string>
<string name="fs_label">Libellé</string>
<string name="fs_type">Type</string>
<string name="part_size">Taille</string>
<string name="license_gpl3">GNU GPLv3</string>
<string name="this_app">Cette application</string>
<string name="license_apache2_0">Apache 2.0</string>
<string name="libaums_license_desc">Implémentation du bloc de périphérique USB dans l\'espace utilisateur</string>
<string name="license_gpl2">GNU GPLv2</string>
<string name="license_bzip2">Personnalisée, inspirée de BSD</string>
<string name="license_custom">Personnalisé</string>
<string name="about">À propos</string>
<string name="dmg2img_license_desc">Convertit les images compressées Apple® DMG</string>
<string name="title_activity_usb_drive_picker">Sélectionner le disque USB</string>
<string name="title_activity_confirmation">Prêt pour l\'écriture</string>
<string name="cannot_write">Impossible d\'écrire l\'image sur le disque USB</string>
<string name="check_notification_progress">Voir la notification pour suivre l\'état d\'avancement</string>
<string name="partition_table_title">Table de partitions :</string>
<string name="could_not_access_usb_error">Impossible d\'accéder au périphérique USB. Peut-être que l\'application a planté la dernière fois\? Débranchez puis rebranchez le disque USB, puis redémarrez l\'application.</string>
<string name="write_image_or_iso">Écrire une image brute ou ISO</string>
<string name="raw_image_desc">Pour les ISOs des distibutions GNU/Linux, les images Raspberry Pi, et les images disque créées sur Windows ou Linux.</string>
<string name="write_apple_dmg">Écrire une image DMG Apple®</string>
<string name="dmg_image_desc">Restaurer une image créée à l\'aide de l\'utilitaire de disques macOS</string>
<string name="no_usb_drives_detected">Aucun disque USB détecté.
\nVeuillez noter qu\'il faut un adaptateur carte SD vers USB pour écrire sur les cartes SD.</string>
<string name="do_not_show_again">Ne plus afficher</string>
<string name="here_be_dragons">Voici les dragons</string>
<string name="i_understand">Je comprends</string>
<string name="dmg_alert_dialog_text">Alors que dans la plupart des cas les images DMG peuvent être restaurées sans aucun problème, il peut parfois y avoir des incohérences. C\'est un avertissement.</string>
<string name="confirm_flash_image">Flasher l\'image</string>
<string name="dataloss_confirmation_dialog_message">Si vous continuez, l\'image sélectionnée sera écrite et toutes les données stockées sur la clé USB seront perdues à jamais.</string>
<string name="warning">Avertissement</string>
<string name="cancel">Annuler</string>
<string name="license_mpl_2_0">MPL-2.0</string>
<string name="storagechooser_license_description">Sélecteur de fichier DMG</string>
<string name="result_channel_desc">Utilisé pour afficher le résultat d\'une opération d\'écriture aboutie</string>
<string name="result_channel_name">Notifications pour les résultats d\'écriture sur l\'USB</string>
<string name="write_failed_tap_for_info">Écriture échouée • Sélectionnez pour plus d\'infos</string>
<string name="write_finished">Écriture terminée</string>
<string name="error_notif_content_text">%1$s a peut être été débranché pendant l\'écriture.</string>
<string name="success_notif_content_text">%1$s a été écrit sur %2$s avec succès</string>
<string name="troubleshooting_info">Informations de débogage</string>
<string name="operation_failed_because">L\'opération n\'a pas pu aboutir à cause de l\'erreur suivante :</string>
<string name="troubleshoot_sock_op_on_non_sock">C\'est une erreur courante. Cela se produit généralement lorsque la clé USB est débranchée pendant l\'écriture ou lorsqu\'elle est connectée via un hub USB. Sur certains périphériques, il peut y avoir un bogue dans le sous-système USB d\'Android : en général, un redémarrage le corrigera pour un certain temps.
\n
\nEssayez ceci :
\n- Débranchez et rebranchez le périphérique USB, puis redémarrez l\'application.
\n- Redémarrez votre appareil (vraiment, essayez-le)
\n- Essayez une autre clé USB
\n- Évitez d\'utiliser inutilement des adaptateurs, des dongles ou des hubs.
\n- Évitez d\'utiliser votre téléphone pendant l\'écriture
\n- Remplacez les adaptateurs USB On-The-Go défectueux.
\n
\nSi le problème persiste, merci d\'ouvrir un ticket sur GitHub.</string>
<string name="reporting_issues">Rapporter des erreurs</string>
<string name="reporting_issues_text">Les erreurs peuvent être rapportés sur GitHub :
\nhttps://github.com/Depau/EtchDroid/issues</string>
<string name="write_failed">Écriture échouée</string>
<string name="unknown_error">Erreur inconnue. Essayez de rebrancher la clé USB ou de redémarrer l\'appareil. Veuillez ouvrir un ticket sur GitHub.</string>
<string name="uncompressed">(non compressé)</string>
<string name="nightmode">Activer le mode nuit</string>
<string name="nightmode_night">Désactiver le mode nuit</string>
<string name="android_pie_bug">Bogue Android Pie</string>
<string name="android_pie_bug_dialog_text">Il y a un bogue sur Android 9 qui provoque l\'échec de certaines écritures.
\nS\'il est écrit \"Écriture échouée\", redémarrez votre appareil et réessayez.</string>
<string name="reset_warnings">Rétablir tous les avertissements</string>
<string name="warnings_reset">Toutes les boîtes de dialogue des avertissements ont été restaurées</string>
<string name="file_type_not_supported">Type de fichier non supporté</string>
<string name="cannot_find_file_in_storage">Impossible de trouver le fichier dans la mémoire interne. Essayez de l\'ouvrir depuis l\'application.</string>
<string name="storage_permission_required">La permission de stockage est nécessaire pour pouvoir lire les images DMG</string>
<string name="library_AndroidX_libraryDescription">AndroidX est une amélioration majeure de la bibliothèque de support Android d\'origine et offre une rétrocompatibilité entre les versions d\'Android</string>
<string name="library_AndroidX_libraryWebsite">https://developer.android.com/jetpack/androidx/</string>
<string name="library_AndroidX_libraryVersion">1.0.1</string>
<string name="library_AndroidX_isOpenSource">true</string>
<string name="library_AndroidX_repositoryLink">https://android.googlesource.com/platform/frameworks/support/+/androidx-master-dev/</string>
<string name="library_KotlinStdlib_author">JetBrains</string>
<string name="library_KotlinStdlib_authorWebsite">https://kotlinlang.org/</string>
<string name="library_KotlinStdlib_libraryName">Kotlin Standard Library</string>
<string name="library_KotlinStdlib_libraryDescription">The Kotlin Standard Library provides living essentials for everyday work with Kotlin</string>
<string name="library_KotlinStdlib_libraryWebsite">https://kotlinlang.org/api/latest/jvm/stdlib/index.html</string>
<string name="library_KotlinStdlib_libraryVersion">1.2.71</string>
<string name="library_KotlinStdlib_isOpenSource">true</string>
<string name="library_KotlinStdlib_repositoryLink">https://github.com/JetBrains/kotlin/tree/master/libraries/stdlib</string>
<string name="library_KotlinStdlib_licenseId">apache_2_0</string>
<string name="library_Material_author">Google</string>
<string name="library_Material_authorWebsite">https://material.io/develop/</string>
<string name="library_Material_libraryName">Material Components</string>
<string name="library_Material_libraryDescription">Make beautiful products, faster. Material is a design system backed by open-source code that helps teams build digital experiences</string>
<string name="library_Material_libraryWebsite">https://material.io/develop/android/</string>
<string name="library_Material_libraryVersion">1.1.0-alpha01</string>
<string name="library_Material_isOpenSource">true</string>
<string name="library_Material_repositoryLink">https://github.com/material-components/material-components-android</string>
<string name="library_Material_licenseId">apache_2_0</string>
<string name="app_desc">Une application pour écrire les images de systèmes d\'exploitation sur les clés USB, pas de root requis.</string>
<string name="buy_me_a_coffee">M\'acheter un café</string>
</resources>

View file

@ -1,4 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="nightmode">Disattiva modalità notturna</string>
</resources>

View file

@ -1,4 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<?xml version='1.0' encoding='UTF-8'?>
<resources>
<string name="app_name">EtchDroid</string>
<string name="flash_dd_usb_api">Scrivi immagine su dispositivo USB (utilizzando le API di Android)</string>
@ -17,8 +17,8 @@
<string name="tap_next_to_write">Tocca Scrivi per scrivere l\'immagine sul dispositivo USB</string>
<string name="notchan_writestatus_title">Avanzamento scrittura</string>
<string name="notchan_writestatus_desc">Utilizzato per mostrare l\'avanzamento dell\'operazione di scrittura in corso</string>
<string name="notif_initializing">Inizializzazione...</string>
<string name="notif_writing_img">Scrittura immagine</string>
<string name="notif_initializing">Inizializzazione</string>
<string name="notif_writing_img">Scrittura immagine</string>
<string name="image_is_not_dmg">L\'immagine selezionata non è in formato DMG (probabilmente è corrotta)</string>
<string name="ptt_aix">IBM AIX</string>
<string name="ptt_amiga">AMIGA</string>
@ -64,9 +64,9 @@
<string name="license_apache2_0">Apache 2.0</string>
<string name="libaums_license_desc">Implementazione dispositivi a blocchi in userspace</string>
<string name="license_gpl2">GNU GPLv2</string>
<string name="license_bzip2">Custom BSD-like</string>
<string name="license_custom">Custom</string>
<string name="licenses">Licenze</string>
<string name="license_bzip2">Simile a BSD</string>
<string name="license_custom">Personalizzata</string>
<string name="about">Informazioni</string>
<string name="dmg2img_license_desc">Converte immagini Apple® DMG compresse</string>
<string name="title_activity_usb_drive_picker">Seleziona dispositivo USB</string>
<string name="title_activity_confirmation">Pronto a scrivere</string>
@ -75,7 +75,7 @@
<string name="partition_table_title">Tabella delle partizioni:</string>
<string name="could_not_access_usb_error">Non è stato possibile accedere al dispositivo USB. Forse hai utilizzato quest\'app in precedenza ma ha smesso di funzionare? Prova a rimuovere e reinserire il dispositivo, quindi riavvia l\'app.</string>
<string name="write_image_or_iso">Scrivi immagine disco o ISO</string>
<string name="raw_image_desc">Ottimo per ISO di distribuzioni GNU/Linux recenti, immagini per Raspberry Pi e immagini disco create su Windows o Linux</string>
<string name="raw_image_desc">Ottimo per ISO di distribuzioni GNU/Linux recenti, immagini per Raspberry Pi e immagini disco create su Windows o Linux.</string>
<string name="write_apple_dmg">Scrivi immagine Apple® DMG</string>
<string name="dmg_image_desc">Ripristina un\'immagine disco creata con l\'Utility Dischi di macOS</string>
<string name="no_usb_drives_detected">Nessun dispositivo USB rilevato.\nPer scrivere su schede SD devi usare un adattore microSD-USB.</string>
@ -97,13 +97,24 @@
<string name="success_notif_content_text">%1$s scritto con successo su %2$s</string>
<string name="troubleshooting_info">Risoluzione dei problemi</string>
<string name="operation_failed_because">L\'operazione non è stata completata a causa del seguente errore:</string>
<string name="troubleshoot_sock_op_on_non_sock">Questo è un errore comune. In genere succede quando il dispositivo USB viene scollegato mentre è in corso una scrittura o quando è connesso attraverso un hub USB. Su qualche dispositivo, invece, è presente un problema nel sottosistema USB di Android: solitamente un riavvio lo risolve per un po\' di tempo.\n\nProva questi suggerimenti:\n• Stacca e riattacca il dispositivo USB, quindi riavvia l\'app\n• Riavvia il dispositivo (davvero, fallo)\n• Prova un\'altro dispositivo USB\n• Evita di usare adattatori o hub se non necessari\n• Evita di usare il telefono mentre sta scrivendo immagini\n• Sostituisci un adattatore USB On-The-Go difettoso</string>
<string name="troubleshoot_sock_op_on_non_sock">Questo è un errore comune. In genere succede quando il dispositivo USB viene scollegato mentre è in corso una scrittura o quando è connesso attraverso un hub USB. Su qualche dispositivo, invece, è presente un problema nel sottosistema USB di Android: solitamente un riavvio lo risolve per un po\' di tempo.
\n
\nProva questi suggerimenti:
\n• Stacca e riattacca il dispositivo USB, quindi riavvia l\'app
\n• Riavvia il dispositivo (davvero, fallo)
\n• Prova un\'altro dispositivo USB
\n• Evita di usare adattatori o hub se non necessari
\n• Evita di usare il telefono mentre sta scrivendo immagini
\n• Sostituisci un adattatore USB On-The-Go difettoso
\n
\nSe il problema persiste segnalacelo su GitHub cosicché possiamo sistemarlo.</string>
<string name="reporting_issues">Segnalazione dei problemi</string>
<string name="reporting_issues_text">I problemi possono essere segnalati su GitHub:\nhttps://github.com/Depau/EtchDroid/issues</string>
<string name="write_failed">Scrittura fallita</string>
<string name="unknown_error">Errore sconosciuto. Prova a ricollegare il dispositivo USB o a riavviare il dispositivo. Per favore, segnala il problema su GitHub.</string>
<string name="uncompressed">(decompresso)</string>
<string name="nightmode">Attiva modalità notturna</string>
<string name="nightmode_night">Disattiva modalità notturna</string>
<string name="android_pie_bug">Bug di Android Pie</string>
<string name="android_pie_bug_dialog_text">A causa di un bug di Android 9, alcune scritture potrebbero fallire.\nSe appare un messaggio di errore \"Scrittura fallita\", riavvia il dispositivo e prova di nuovo.</string>
<string name="reset_warnings">Reimposta tutti gli avvisi</string>
@ -111,4 +122,11 @@
<string name="file_type_not_supported">Tipo di file non supportato</string>
<string name="cannot_find_file_in_storage">Impossibile trovare file nella memoria interna. Prova ad aprirlo da dentro l\'app.</string>
<string name="storage_permission_required">Il permesso per l\'archiviazione è richiesto per leggere i file DMG</string>
</resources>
<string name="library_AndroidX_libraryDescription">AndroidX è una nuova versione della Libreria di Supporto Android e fornisce compatibilità con le precedenti versioni di Android</string>
<string name="library_KotlinStdlib_libraryName">Libreria Standard Kotlin</string>
<string name="library_KotlinStdlib_libraryDescription">La libreria standard Kotlin fornisce il materiale essenziale per lavorare con Kotlin</string>
<string name="app_desc">Un\'applicazione per scrivere immagini di sistemi operativi su chiavette USB, su Android, senza root.</string>
<string name="buy_me_a_coffee">Offrimi un caffè</string>
<string name="library_Material_libraryDescription">Crea bei prodotti, più velocemente. Material è un sistema di design che, con l\'aiuto di software open-source, aiuta i team a sviluppare esperienze digitali</string>
</resources>

View file

@ -1,4 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="nightmode">Disable night mode</string>
<string name="nightmode">@string/nightmode_night</string>
</resources>

View file

@ -9,4 +9,10 @@
<style name="CardContentStyleBase" parent="ThemeOverlay.AppCompat.Dark">
<item name="android:background">@color/colorPrimary</item>
</style>
<style name="AttribouterTheme" parent="Theme.AppCompat.NoActionBar">
<item name="personDialogTheme">@style/PersonDialogTheme</item>
</style>
<style name="PersonDialogTheme" parent="ThemeOverlay.AppCompat.Dialog"/>
</resources>

View file

@ -0,0 +1,2 @@
<?xml version="1.0" encoding="utf-8"?>
<resources></resources>

View file

@ -0,0 +1,116 @@
<resources>
<string name="app_name">EtchDroid</string>
<string name="flash_dd_usb_api">İmajı doğrudan diske yaz (Android API kullanarak)</string>
<string name="flash_dmg_api">macOS DMG imajını diske yaz (Android API kullanarak)</string>
<string name="flash_unetbootin">Unetbootin tarzı yazma (yalnızca MBR, root gerektirir)</string>
<string name="flash_woeusb">Windows imajı yaz (WoeUSB kullanarak, root gerektirir)</string>
<string name="action_refresh">Yenile</string>
<string name="usb_perm_denied">İzin reddedildi.</string>
<string name="usb_perm_denied_noname">USB aygıtı için izin reddedildi.</string>
<string name="selected_image">Seçilen imaj:</string>
<string name="selected_method">Seçilen yazma metodu:</string>
<string name="selected_usbdev">Seçilen USB aygıtı:</string>
<string name="unknown_filename">Bilinmeyen dosya adı</string>
<string name="image_bigger_than_usb">İmaj dosyası bellekten daha büyük olduğu için yazma işlemi yapılamıyor.</string>
<string name="cant_read_usbdev">USB aygıtı okunamıyor.</string>
<string name="tap_next_to_write">Aygıta yazmayı başlatmak için \"Yaz\" butonuna dokunun.</string>
<string name="notchan_writestatus_title">USB yazma durumu</string>
<string name="notchan_writestatus_desc">İmajın USB aygıtına yazılırkenki durumunu göstermek için kullanılır.</string>
<string name="notif_initializing">Başlatılıyor...</string>
<string name="notif_writing_img">İmaj Yazılıyor.</string>
<string name="image_is_not_dmg">Seçilen dosya bir DMG imajı değil. (bozulmuş olaiblir)</string>
<string name="ptt_aix">IBM AIX</string>
<string name="ptt_amiga">AMIGA</string>
<string name="ptt_bsd">BSD</string>
<string name="ptt_dvh">DVH</string>
<string name="ptt_gpt">GUID Bölüm Tablosu (GPT)</string>
<string name="ptt_loop">Hiçbiri</string>
<string name="ptt_mac">Apple Bölüm Tablosu (APT)</string>
<string name="ptt_msdos">Master Boot Record (MS-DOS)</string>
<string name="ptt_pc98">PC98</string>
<string name="ptt_sun">Sun</string>
<string name="fs_fat12">FAT12</string>
<string name="fs_fat16">FAT16</string>
<string name="fs_fat32">FAT32</string>
<string name="fs_exfat">ExFAT</string>
<string name="fs_ntfs">NTFS</string>
<string name="fs_refs">ReFS</string>
<string name="fs_hfs">macOS HFS</string>
<string name="fs_hfsplus">macOS HFS+</string>
<string name="fs_apfs">Apple Dosya Sistemi (APFS)</string>
<string name="fs_apt_data">APT veri</string>
<string name="fs_iso9660">ISO 9660</string>
<string name="fs_ext2">Linux Ext2</string>
<string name="fs_ext3">Linux Ext3</string>
<string name="fs_ext4">Linux Ext4</string>
<string name="fs_btrfs">Btrfs</string>
<string name="fs_f2fs">f2fs</string>
<string name="fs_luks">LUKS şifrelenmiş</string>
<string name="fs_linux_swap">Linux swap</string>
<string name="fs_linux_lvm_pv">Linux LVM2 fiziksel aygıt</string>
<string name="fs_ufs">UFS</string>
<string name="fs_xfs">XFS</string>
<string name="fs_zfs">ZFS</string>
<string name="fs_free">Boş alan</string>
<string name="fs_unformatted">Biçimlendirilmemiş</string>
<string name="fs_unknown">Bilinmeyen</string>
<string name="part_label">İsim</string>
<string name="fs_label">Etiket</string>
<string name="fs_type">Tür</string>
<string name="part_size">Boyut</string>
<string name="license_gpl3">GNU GPLv3</string>
<string name="this_app">Bu uygulama</string>
<string name="license_apache2_0">Apache 2.0</string>
<string name="libaums_license_desc">Userspace USB block device implementation</string>
<string name="license_gpl2">GNU GPLv2</string>
<string name="license_bzip2">Özel BSD benzeri</string>
<string name="license_custom">Özel</string>
<string name="about">Lisanslar</string>
<string name="dmg2img_license_desc">Sıkıştırılmış Apple® DMG imajlarını dönüştürür.</string>
<string name="title_activity_usb_drive_picker">USB aygıtı seçin.</string>
<string name="title_activity_confirmation">Yazmaya hazır.</string>
<string name="cannot_write">İmaj, USB\'ye yazılamıyor.</string>
<string name="check_notification_progress">İşlem için bildirimi kontrol edin.</string>
<string name="partition_table_title">Bölümlendirme tablosu:</string>
<string name="could_not_access_usb_error">USB aygıtına erişilemiyor. Uygulamayı bir önceki çalıştırmaızda çökmüş olabilir mi? USB aygıtınızı çıkarıp tekrar takın ve uygulamayı kapatıp açın.</string>
<string name="write_image_or_iso">RAW imajı veya ISO yaz.</string>
<string name="raw_image_desc">GNU/Linux dağıtımlarının ISO dosyaları, Raspberry Pi imajları ve Windows yada Linux ortamında oluşturulmuş imajlar için önerilir.</string>
<string name="write_apple_dmg">Apple® DMG imajı yaz.</string>
<string name="dmg_image_desc">macOS Disk İzlencesi ile oluşturulmuş bir imaj yaz.</string>
<string name="no_usb_drives_detected">USB aygıtı bulunamadı.\nSD kartlara yazmak için bir SD to USB adaptöre ihtiyacınız olduğunu unutmayın.</string>
<string name="do_not_show_again">Bir daha gösterme</string>
<string name="here_be_dragons">Ejderhalar burada olacak</string>
<string name="i_understand">Anladım, devam</string>
<string name="dmg_alert_dialog_text">Birçok durumda DMG imajları sorunsuz biçimde yazılır, ama bazen sorunlar da yaşayabilirsiniz. Uyarıldınız.</string>
<string name="confirm_flash_image">İmajı yazdır</string>
<string name="dataloss_confirmation_dialog_message">Devam ederseniz, seçtiğiniz imaj diske yazılacak ve USB bellekteki tüm veri sonsuza kadar yok olacak.</string>
<string name="warning">Uyarı</string>
<string name="cancel">İptal</string>
<string name="license_mpl_2_0">MPL-2.0</string>
<string name="storagechooser_license_description">DMG dosya seçici</string>
<string name="result_channel_desc">Bitmiş bir yazma işleminin sonucunu göstermek için kullanılır.</string>
<string name="result_channel_name">USB yazma sonucu bildirimleri</string>
<string name="write_failed_tap_for_info">Yazma başarısız • Bilgi için dokunun.</string>
<string name="write_finished">Yazma tamamlandı.</string>
<string name="error_notif_content_text">%1$s yazma sırasında çıkarılmış olabilir.</string>
<string name="success_notif_content_text">%1$s başarıyla %2$s üzerine yazıldı.</string>
<string name="troubleshooting_info">Y</string>
<string name="operation_failed_because">İşlem aşağıdaki hatadan dolayı tamamlanamadı:</string>
<string name="troubleshoot_sock_op_on_non_sock">Bu yaygın bir hatadır. genellikle yazma sırasında USB belleğin çıkarılması, yada bir USB çoklayıcı kullanarak bağlanması ile oluşur. Bazı cihazlarda bu bir Android USB altsistemi hatası olabilir: çoğu zaman cihaz yeniden başlatıldığında çözülebilir. \n\nBunları deneyin:\n• USB aygıtınızı çıkarıp takın, sonra uygulamayı yeniden başlatın.\n• Cihazınızı yeniden başlatın. (evet, deneyin.)\n• Başka bir USB aygıtı deneyin.\n• Gereksiz adaptörler, çoklayıcılar vb. kullanmaktan kaçının.\n• YAzma sırasında cihazınızı kullanmaktan kaçının.\n• Hasarlı OTG kablonuzu değiştirin.\n\nEğer sorununuz çözülmüyorsa GitHub üzerinden sorun bildirimi yapın.</string>
<string name="reporting_issues">Sorun bildirimi</string>
<string name="reporting_issues_text">Sorunlar GitHub üzerinden bildirilebilir:\nhttps://github.com/Depau/EtchDroid/issues</string>
<string name="write_failed">Yazma başarısız.</string>
<string name="unknown_error">Bilinmeyen hata. USB aygıtınızı çıkarıp tekrar takın veya cihazınızı yeniden başlatın. Lütfen GitHub üzerinden bir sorun bildirimi oluşturun.</string>
<string name="uncompressed">(sıkıştırılmamış)</string>
<string name="nightmode">Gece modunu etkinleştir</string>
<string name="nightmode_night">Gece modunu devre dışı bırak</string>
<string name="android_pie_bug">Android Pie hatası</string>
<string name="android_pie_bug_dialog_text">Android 9 ile yazılırken hata almanıza sebep olan bir seoun yaşıyoruz.\nEğer yazma başarısız oluyorsa cihazınızı yeniden başlatın ve tekrar deneyin.</string>
<string name="reset_warnings">Tüm uyarıları sıfırla</string>
<string name="warnings_reset">Tüm uyarı diyalogları sıfırlandı.</string>
<string name="file_type_not_supported">Dosya türü deskteklenmiyor</string>
<string name="cannot_find_file_in_storage">Dosya, dahili hafızanızda bulunamadı. Uygulamayı kullanarak seçmeyi deneyin.</string>
<string name="storage_permission_required">DMG dosyalarını okuyabilmek için depolama izni gerekmektedir.</string>
<string name="app_desc">Un\'applicazione per scrivere immagini di sistemi operativi su chiavette USB, su Android, senza root.</string>
<string name="buy_me_a_coffee">Pagami un caffè</string>
</resources>

View file

@ -1,5 +1,5 @@
<resources>
<string name="app_name">EtchDroid</string>
<string name="app_name" translatable="false">EtchDroid</string>
<string name="flash_dd_usb_api">Write image directly to disk (using Android API)</string>
<string name="flash_dmg_api">Restore macOS DMG image to disk (using Android API)</string>
<string name="flash_unetbootin">Unetbootin-style flash (MBR only, requires root)</string>
@ -16,41 +16,41 @@
<string name="tap_next_to_write">Tap Write to write the image to the USB drive</string>
<string name="notchan_writestatus_title">USB write status</string>
<string name="notchan_writestatus_desc">Used to display the status of images being written to USB drives</string>
<string name="notif_initializing">Initializing...</string>
<string name="notif_writing_img">Writing image</string>
<string name="notif_initializing">Initializing</string>
<string name="notif_writing_img">Writing image</string>
<string name="image_is_not_dmg">Selected image is not a DMG image (maybe it\'s corrupted)</string>
<string name="ptt_aix">IBM AIX</string>
<string name="ptt_amiga">AMIGA</string>
<string name="ptt_bsd">BSD</string>
<string name="ptt_dvh">DVH</string>
<string name="ptt_aix" translatable="false">IBM AIX</string>
<string name="ptt_amiga" translatable="false">AMIGA</string>
<string name="ptt_bsd" translatable="false">BSD</string>
<string name="ptt_dvh" translatable="false">DVH</string>
<string name="ptt_gpt">GUID Partition Table (GPT)</string>
<string name="ptt_loop">None</string>
<string name="ptt_mac">Apple Partition Table (APT)</string>
<string name="ptt_msdos">Master Boot Record (MSDOS)</string>
<string name="ptt_pc98">PC98</string>
<string name="ptt_sun">Sun</string>
<string name="fs_fat12">FAT12</string>
<string name="fs_fat16">FAT16</string>
<string name="fs_fat32">FAT32</string>
<string name="fs_exfat">ExFAT</string>
<string name="fs_ntfs">NTFS</string>
<string name="fs_refs">ReFS</string>
<string name="fs_hfs">macOS HFS</string>
<string name="fs_hfsplus">macOS HFS+</string>
<string name="fs_apfs">Apple Filesystem (APFS)</string>
<string name="ptt_msdos" translatable="false">Master Boot Record (MSDOS)</string>
<string name="ptt_pc98" translatable="false">PC98</string>
<string name="ptt_sun" translatable="false">Sun</string>
<string name="fs_fat12" translatable="false">FAT12</string>
<string name="fs_fat16" translatable="false">FAT16</string>
<string name="fs_fat32" translatable="false">FAT32</string>
<string name="fs_exfat" translatable="false">ExFAT</string>
<string name="fs_ntfs" translatable="false">NTFS</string>
<string name="fs_refs" translatable="false">ReFS</string>
<string name="fs_hfs" translatable="false">macOS HFS</string>
<string name="fs_hfsplus" translatable="false">macOS HFS+</string>
<string name="fs_apfs" translatable="false">Apple Filesystem (APFS)</string>
<string name="fs_apt_data">APT data</string>
<string name="fs_iso9660">ISO 9660</string>
<string name="fs_ext2">Linux Ext2</string>
<string name="fs_ext3">Linux Ext3</string>
<string name="fs_ext4">Linux Ext4</string>
<string name="fs_btrfs">Btrfs</string>
<string name="fs_f2fs">f2fs</string>
<string name="fs_iso9660" translatable="false">ISO 9660</string>
<string name="fs_ext2" translatable="false">Linux Ext2</string>
<string name="fs_ext3" translatable="false">Linux Ext3</string>
<string name="fs_ext4" translatable="false">Linux Ext4</string>
<string name="fs_btrfs" translatable="false">Btrfs</string>
<string name="fs_f2fs" translatable="false">f2fs</string>
<string name="fs_luks">LUKS encrypted</string>
<string name="fs_linux_swap">Linux swap</string>
<string name="fs_linux_lvm_pv">Linux LVM2 physical volume</string>
<string name="fs_ufs">UFS</string>
<string name="fs_xfs">XFS</string>
<string name="fs_zfs">ZFS</string>
<string name="fs_ufs" translatable="false">UFS</string>
<string name="fs_xfs" translatable="false">XFS</string>
<string name="fs_zfs" translatable="false">ZFS</string>
<string name="fs_free">Free space</string>
<string name="fs_unformatted">Unformatted</string>
<string name="fs_unknown">Unknown</string>
@ -58,14 +58,14 @@
<string name="fs_label">Label</string>
<string name="fs_type">Type</string>
<string name="part_size">Size</string>
<string name="license_gpl3">GNU GPLv3</string>
<string name="license_gpl3" translatable="false">GNU GPLv3</string>
<string name="this_app">This app</string>
<string name="license_apache2_0">Apache 2.0</string>
<string name="license_apache2_0" translatable="false">Apache 2.0</string>
<string name="libaums_license_desc">Userspace USB block device implementation</string>
<string name="license_gpl2">GNU GPLv2</string>
<string name="license_bzip2">Custom BSD-like</string>
<string name="license_custom">Custom</string>
<string name="licenses">Licenses</string>
<string name="license_gpl2" translatable="false">GNU GPLv2</string>
<string name="license_bzip2" comment="This string must be very short: it is displayed in a small badge and long strings will be truncated">Custom BSD-like</string>
<string name="license_custom" comment="This string must be very short: it is displayed in a small badge and long strings will be truncated">Custom</string>
<string name="about">About</string>
<string name="dmg2img_license_desc">Converts compressed Apple® DMG images</string>
<string name="title_activity_usb_drive_picker">Select USB drive</string>
<string name="title_activity_confirmation">Ready to write</string>
@ -74,19 +74,19 @@
<string name="partition_table_title">Partition table:</string>
<string name="could_not_access_usb_error">Could not access USB device. Maybe you ran the app previously and it crashed? Remove and reinsert the USB drive, then restart the app.</string>
<string name="write_image_or_iso">Write raw image or ISO</string>
<string name="raw_image_desc">Good for GNU/Linux distro ISOs, Raspberry Pi images and disk images created on Windows or Linux</string>
<string name="raw_image_desc">Good for GNU/Linux distro ISOs, Raspberry Pi images, and disk images created on Windows or Linux.</string>
<string name="write_apple_dmg">Write Apple® DMG image</string>
<string name="dmg_image_desc">Restore an image created with macOS Disk Utility</string>
<string name="no_usb_drives_detected">No USB drives detected.\nNote that you need an SD card to USB adapter to write to SD cards.</string>
<string name="do_not_show_again">Do not show again</string>
<string name="here_be_dragons">Here be dragons</string>
<string name="i_understand">I understand, continue</string>
<string name="dmg_alert_dialog_text">While in most cases DMG images can be restored just fine, sometimes there may be inconsistencies. You\'ve been warned.</string>
<string name="i_understand">I understand</string>
<string name="dmg_alert_dialog_text">While in most cases DMG images can be restored just fine, sometimes there may be inconsistencies. This is a warning.</string>
<string name="confirm_flash_image">Flash image</string>
<string name="dataloss_confirmation_dialog_message">If you continue, selected image will be written and all data stored on the USB drive will be lost forever.</string>
<string name="dataloss_confirmation_dialog_message">If you continue, the selected image will be written and all data stored on the USB drive will be lost forever.</string>
<string name="warning">Warning</string>
<string name="cancel">Cancel</string>
<string name="license_mpl_2_0">MPL-2.0</string>
<string name="license_mpl_2_0" translatable="false">MPL-2.0</string>
<string name="storagechooser_license_description">DMG file selector</string>
<string name="result_channel_desc">Used to display the result of a finished write operation</string>
<string name="result_channel_name">USB write result notifications</string>
@ -103,6 +103,7 @@
<string name="unknown_error">Unknown error. Try to reattach the USB drive or reboot the device. Please file an issue on GitHub.</string>
<string name="uncompressed">(uncompressed)</string>
<string name="nightmode">Enable night mode</string>
<string name="nightmode_night">Disable night mode</string>
<string name="android_pie_bug">Android Pie bug</string>
<string name="android_pie_bug_dialog_text">There is a bug on Android 9 which causes some writes to fail.\nIf it says \"Write failed\", reboot your device and try again.</string>
<string name="reset_warnings">Reset all warnings</string>
@ -110,4 +111,47 @@
<string name="file_type_not_supported">File type not supported</string>
<string name="cannot_find_file_in_storage">Cannot find file in internal storage. Try opening it from within the app.</string>
<string name="storage_permission_required">Storage permission is required to read DMG images</string>
<!-- AndroidX Jetpack -->
<string name="define_AndroidX" translatable="false"/>
<string name="library_AndroidX_author" translatable="false">AOSP</string>
<string name="library_AndroidX_authorWebsite" translatable="false">https://developer.android.com</string>
<string name="library_AndroidX_libraryName" translatable="false">AndroidX Jetpack</string>
<string name="library_AndroidX_libraryDescription">AndroidX is a major improvement to the original Android Support Library and provides backwards-compatibility across Android releases</string>
<string name="library_AndroidX_libraryWebsite" translatable="false">https://developer.android.com/jetpack/androidx/</string>
<string name="library_AndroidX_libraryVersion" translatable="false">1.0.1</string>
<string name="library_AndroidX_isOpenSource" translatable="false">true</string>
<string name="library_AndroidX_repositoryLink" translatable="false">https://android.googlesource.com/platform/frameworks/support/+/androidx-master-dev/</string>
<string name="library_AndroidX_licenseId" translatable="false">apache_2_0</string>
<!-- Kotlin Standard Library -->
<string name="define_KotlinStdlib" translatable="false"/>
<string name="library_KotlinStdlib_author" translatable="false">JetBrains</string>
<string name="library_KotlinStdlib_authorWebsite" translatable="false">https://kotlinlang.org/</string>
<string name="library_KotlinStdlib_libraryName">Kotlin Standard Library</string>
<string name="library_KotlinStdlib_libraryDescription">The Kotlin Standard Library provides living essentials for everyday work with Kotlin</string>
<string name="library_KotlinStdlib_libraryWebsite" translatable="false">https://kotlinlang.org/api/latest/jvm/stdlib/index.html</string>
<string name="library_KotlinStdlib_libraryVersion" translatable="false">1.2.71</string>
<string name="library_KotlinStdlib_isOpenSource" translatable="false">true</string>
<string name="library_KotlinStdlib_repositoryLink" translatable="false">https://github.com/JetBrains/kotlin/tree/master/libraries/stdlib</string>
<string name="library_KotlinStdlib_licenseId" translatable="false">apache_2_0</string>
<!-- Material Components -->
<string name="define_Material" translatable="false"/>
<string name="library_Material_author" translatable="false">Google</string>
<string name="library_Material_authorWebsite" translatable="false">https://material.io/develop/</string>
<string name="library_Material_libraryName" translatable="false">Material Components</string>
<string name="library_Material_libraryDescription">Make beautiful products, faster. Material is a design system backed by open-source code that helps teams build digital experiences</string>
<string name="library_Material_libraryWebsite" translatable="false">https://material.io/develop/android/</string>
<string name="library_Material_libraryVersion" translatable="false">1.1.0-alpha01</string>
<string name="library_Material_isOpenSource" translatable="false">true</string>
<string name="library_Material_repositoryLink" translatable="false">https://github.com/material-components/material-components-android</string>
<string name="library_Material_licenseId" translatable="false">apache_2_0</string>
<string name="app_desc">An application to write OS images to USB drives, on Android, no root required.</string>
<string name="buy_me_a_coffee">Buy me a coffee</string>
</resources>

View file

@ -0,0 +1,143 @@
<?xml version="1.0" encoding="utf-8"?>
<about>
<me.jfenn.attribouter.wedges.AppWedge repo="Depau/EtchDroid">
<me.jfenn.attribouter.wedges.link.LinkWedge
name="F-Droid"
icon="@drawable/ic_fdroid_logo_24dp"
url="https://f-droid.org/en/packages/eu.depau.etchdroid/" />
<me.jfenn.attribouter.wedges.link.LinkWedge id="playStore" />
<me.jfenn.attribouter.wedges.link.LinkWedge
name="^GitHub"
id="github" />
</me.jfenn.attribouter.wedges.AppWedge>
<me.jfenn.attribouter.wedges.ContributorsWedge showDefaults="false">
<me.jfenn.attribouter.wedges.ContributorWedge
name="Davide Depau"
bio="My dream is meeting the love of my life here just to be able to say &quot;we met on GitHub&quot;. GNU/Linux and Python lover, gay as fuck."
email="davide@depau.eu"
login="Depau"
position="1"
task="Owner">
<me.jfenn.attribouter.wedges.link.LinkWedge
name="Instagram"
icon="https://instagram.com/favicon.ico"
url="https://instagram.com/depau.py" />
<me.jfenn.attribouter.wedges.link.LinkWedge
name="StackOverflow"
icon="https://stackoverflow.com/favicon.ico"
url="https://stackoverflow.com/story/depau" />
<me.jfenn.attribouter.wedges.link.LinkWedge
name="PayPal"
icon="https://paypal.com/favicon.ico"
url="https://paypal.me/DavideDepau/5" />
</me.jfenn.attribouter.wedges.ContributorWedge>
</me.jfenn.attribouter.wedges.ContributorsWedge>
<me.jfenn.attribouter.wedges.LicensesWedge
overflow="5"
showDefaults="true">
<me.jfenn.attribouter.wedges.LicenseWedge
description="An application to write OS images to USB drives, on Android, no root required."
license="gpl-3.0"
licenseName="GNU General Public License v3.0"
repo="Depau/EtchDroid"
title="This app"
website="https://etchdroid.depau.eu" />
<me.jfenn.attribouter.wedges.LicenseWedge
description="^@string/app_desc"
license="gpl-3.0"
licenseName="GNU GPL v3.0"
repo="Depau/EtchDroid"
title="^@string/this_app"
website="https://etchdroid.depau.eu" />
<me.jfenn.attribouter.wedges.LicenseWedge
description="^@string/storagechooser_license_description"
license="mpl-2.0"
licenseName="Mozilla Public License 2.0"
repo="codekidX/storage-chooser"
title="Storage Chooser" />
<me.jfenn.attribouter.wedges.LicenseWedge
description="^@string/libaums_license_desc"
license="apache-2.0"
licenseName="Apache 2.0"
repo="Depau/libaums"
title="libaums (fork)" />
<me.jfenn.attribouter.wedges.LicenseWedge
description="^@string/dmg2img_license_desc"
license="gpl-2.0"
licenseName="GNU General Public License 2.0"
repo="Depau/dmg2img-cmake"
title="dmg2img (fork)" />
<me.jfenn.attribouter.wedges.LicenseWedge
licenseBody="@string/license_bzip2"
licenseName="Other"
repo="LuaDist/bzip2"
title="bzip2" />
<me.jfenn.attribouter.wedges.LicenseWedge
licenseName="Custom FOSS"
repo="Depau/libressl"
title="LibreSSL" />
<me.jfenn.attribouter.wedges.LicenseWedge
description="@string/library_AndroidX_libraryDescription"
license="apache-2.0"
licenseName="Apache License 2.0"
licenseUrl="https://choosealicense.com/licenses/apache-2.0/"
title="@string/library_AndroidX_libraryName"
website="@string/library_AndroidX_libraryWebsite" />
<me.jfenn.attribouter.wedges.LicenseWedge
description="@string/library_KotlinStdlib_libraryDescription"
license="apache-2.0"
licenseName="Apache License 2.0"
licenseUrl="https://choosealicense.com/licenses/apache-2.0/"
title="@string/library_KotlinStdlib_libraryName"
website="@string/library_KotlinStdlib_libraryWebsite" />
<me.jfenn.attribouter.wedges.LicenseWedge
description="@string/library_Material_libraryDescription"
license="apache-2.0"
licenseName="Apache License 2.0"
licenseUrl="https://choosealicense.com/licenses/apache-2.0/"
title="@string/library_Material_libraryName"
website="@string/library_Material_libraryWebsite" />
<me.jfenn.attribouter.wedges.LicenseWedge
repo="google/guava"
license="apache-2.0"
licenseName="Apache License 2.0"
licenseUrl="https://choosealicense.com/licenses/apache-2.0/"/>
</me.jfenn.attribouter.wedges.LicensesWedge>
<me.jfenn.attribouter.wedges.TranslatorsWedge overflow="5">
<me.jfenn.attribouter.wedges.TranslatorWedge
name="Davide Depau"
locales="it"
login="Depau" />
<me.jfenn.attribouter.wedges.TranslatorWedge
name="Can Berberoglu"
avatar="https://avatars1.githubusercontent.com/u/21688873"
locales="tr"
login="Exodus1831" />
<me.jfenn.attribouter.wedges.TranslatorWedge
name="Jakob Senkl"
avatar="https://avatars3.githubusercontent.com/u/8578362"
locales="de"
login="fyr77" />
<me.jfenn.attribouter.wedges.TranslatorWedge
name="Yassine Imounachen"
avatar="https://avatars3.githubusercontent.com/u/9938439"
locales="fr"
login="yassineim" />
</me.jfenn.attribouter.wedges.TranslatorsWedge>
</about>

View file

@ -1,24 +1,25 @@
// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
ext.kotlin_version = '1.2.71'
ext.kotlin_version = '1.3.20'
repositories {
google()
jcenter()
google()
maven { url "https://jitpack.io" }
}
dependencies {
classpath 'com.android.tools.build:gradle:3.2.1'
classpath 'com.android.tools.build:gradle:3.3.1'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
// For libaums
classpath 'com.github.dcendents:android-maven-gradle-plugin:1.5'
classpath 'com.github.dcendents:android-maven-gradle-plugin:2.1'
}
}
allprojects {
repositories {
google()
jcenter()
google()
maven { url "https://jitpack.io" }
}
}

View file

@ -3,18 +3,18 @@ cmake_minimum_required(VERSION 3.4)
set(EXECUTABLE_OUTPUT_PATH "${CMAKE_CURRENT_SOURCE_DIR}/src/main/assets/bin/${ANDROID_ABI}")
find_program(CCACHE_FOUND ccache)
if(CCACHE_FOUND)
if (CCACHE_FOUND)
set_property(GLOBAL PROPERTY RULE_LAUNCH_COMPILE ccache)
set_property(GLOBAL PROPERTY RULE_LAUNCH_LINK ccache)
endif(CCACHE_FOUND)
endif (CCACHE_FOUND)
execute_process(
COMMAND truncate -s 0 crypto/compat/getpagesize.c
WORKING_DIRECTORY src/c/libressl)
COMMAND truncate -s 0 crypto/compat/getpagesize.c
WORKING_DIRECTORY src/c/libressl)
execute_process(
COMMAND ./autogen.sh
WORKING_DIRECTORY src/c/libressl)
COMMAND touch VERSION
WORKING_DIRECTORY src/c/libressl)
include_directories(src/c/bzip2)
include_directories(src/c/libressl/include)

@ -1 +1 @@
Subproject commit 4dbf285573d5254e5169be44e45c7685a336b6e8
Subproject commit 78f4c1734d63f89adccebefd03c77218148f8072

3
docs/.gitattributes vendored Normal file
View file

@ -0,0 +1,3 @@
* text=auto
*.md text
assets/favicons/browserconfig.xml eol=crlf

83
docs/.gitignore vendored Normal file
View file

@ -0,0 +1,83 @@
# Created by https://www.gitignore.io/api/kate,linux,jekyll,ruby,windows
### Kate ###
# Swap Files #
.*.kate-swp
.swp.*
### Linux ###
*~
# KDE directory preferences
.directory
# Linux trash folder which might appear on any partition or disk
.Trash-*
### Jekyll ###
_site/
.sass-cache/
.jekyll-metadata
### Ruby ###
*.gem
*.rbc
/.config
/coverage/
/InstalledFiles
/pkg/
/spec/reports/
/spec/examples.txt
/test/tmp/
/test/version_tmp/
/tmp/
## Specific to RubyMotion:
.dat*
.repl_history
build/
## Documentation cache and generated files:
/.yardoc/
/_yardoc/
/doc/
/rdoc/
## Environment normalisation:
/.bundle/
/vendor/bundle
/lib/bundler/man/
# for a library or gem, you might want to ignore these files since the code is
# intended to run in multiple environments; otherwise, check them in:
Gemfile.lock
# .ruby-version
# .ruby-gemset
# unless supporting rvm < 1.11.0 or doing something fancy, ignore this:
.rvmrc
### Windows ###
# Windows image file caches
Thumbs.db
ehthumbs.db
# Folder config file
Desktop.ini
# Recycle Bin used on file shares
$RECYCLE.BIN/
# Windows Installer files
*.cab
*.msi
*.msm
*.msp
# Windows shortcuts
*.lnk

5
docs/Gemfile Normal file
View file

@ -0,0 +1,5 @@
source "https://rubygems.org"
gem "jekyll", ">= 3.6.3"
gem 'jekyll-sitemap', '0.9.0'
gem 'wdm', '~> 0.1.0' if Gem.win_platform?

22
docs/LICENSE Normal file
View file

@ -0,0 +1,22 @@
The MIT License (MIT)
Copyright (c) 2015 Antônio Vinícius Menezes Medeiros
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

View file

@ -1 +1,26 @@
theme: jekyll-theme-cayman
title: EtchDroid
description: >
An application to write OS images to USB drives, on Android, no root required.
lang: en
url: "https://etchdroid.depau.eu"
author:
name: Davide Depau
email: etchdroid@depau.eu
site: http://depau.eu
github_username: "Depau"
excerpt_separator: <!--more-->
exclude: ['Gemfile', 'Gemfile.lock', 'LICENSE', 'README.md']
permalink: pretty
gems:
- jekyll-sitemap
image: "/assets/img/icon.png"

View file

@ -0,0 +1,10 @@
<!-- Google AdSense -->
<div class="row">
<div class="col-xs-12">
<ins class="adsbygoogle" id="{{ include.id }}"
data-ad-client="{{ site.google.adsense.publisher_id }}"
data-ad-format="auto"
data-ad-slot="{{ include.ad_slot }}"></ins>
</div><!-- .col-xs-12 -->
</div><!-- .row -->
<!-- End Google AdSense -->

101
docs/_includes/footer.html Normal file
View file

@ -0,0 +1,101 @@
<footer class="footer">
<div class="container">
<div class="row">
<div class="col-xs-12">
<p class="text-center">
EtchDroid website by {% if site.author.name %}<a href='#author'>{{ site.author.name }}</a>{% else %}<a href='#about'>{{ site.title }}</a>{% endif %}. Based on <a href='https://github.com/vinyanalista/material-jekyll'>Material site template for Jekyll</a>.
</p>
</div>
</div>
</div>
</footer>
<meta itemprop="description" content="{% if page.excerpt %}{{ page.excerpt | strip_html | strip_newlines | truncatewords: 55 }}{% else %}{{ site.description }}{% endif %}">
{% if page.image %}
{% assign image = page.image %}
{% elsif site.image %}
{% assign image = site.image %}
{% endif %}
{% if image %}
<div itemprop="image" itemscope itemtype="http://schema.org/ImageObject">
<meta itemprop="url" content="{{ image | prepend: site.baseurl | replace: '//', '/' | prepend: site.url }}"/>
<!--<meta itemprop="width" content=""/>--><!-- TODO Image width -->
<!--<meta itemprop="height" content=""/>--><!-- TODO Image height -->
</div>
{% endif %}
{% if site.lang %}
<meta itemprop="inLanguage" content="{{ site.lang }}"/>
{% endif %}
{% if site.disqus_shortname %}
<!-- Disqus -->
<script type="text/javascript">
/* * * CONFIGURATION VARIABLES * * */
{% if site.lang %}
var disqus_config = function () {
this.language = "{{ site.lang }}";
};
{% endif %}
var disqus_shortname = '{{ site.disqus_shortname }}';
/* * * DON'T EDIT BELOW THIS LINE * * */
(function () {
var s = document.createElement('script'); s.async = true;
s.type = 'text/javascript';
s.src = '//' + disqus_shortname + '.disqus.com/count.js';
(document.getElementsByTagName('HEAD')[0] || document.getElementsByTagName('BODY')[0]).appendChild(s);
}());
</script>
<!-- Disqus End -->
{% endif %}
{% if site.google.adsense.publisher_id %}
<!-- Google AdSense -->
{% if site.google.adsense.content_ad_unit_2 %}
{% include adsense.html id="content_ad_unit_2" ad_slot=site.google.adsense.content_ad_unit_2 %}
{% endif %}
<script type="text/javascript">
adsbygoogle = window.adsbygoogle || [];
$(document).ready(function(){
{% if site.google.adsense.content_ad_unit_2 %}
var $ad = $('#content_ad_unit_2').closest('.row');
var $posts = $('.blog-post');
if ($posts.length > 1) {
// Post listing
var post;
if ($posts.length > 2) {
post = random_number(2, $posts.length);
} else {
post = 2;
}
$posts.eq(post - 1).find('.blog-post-content .row').after($ad);
} else {
// Page or post
var $paragraphs = $('.blog-post-content p').filter(function() {
return ($(this).closest('.no-ads-here').length == 0);
});
if ($paragraphs.length > 0) {
var paragraph;
if ($paragraphs.length > 1) {
paragraph = random_number(1, $paragraphs.length);
} else {
paragraph = 1;
}
$paragraphs.eq(paragraph - 1).after($ad);
} else {
$ad.remove();
}
}
{% endif %}
$('.adsbygoogle').each(function(index, element){
adsbygoogle.push({});
});
});
</script>
<!-- Google AdSense End -->
{% endif %}

173
docs/_includes/head.html Normal file
View file

@ -0,0 +1,173 @@
<head>
<meta charset="{{ site.encoding }}">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<!-- The above 3 meta tags *must* come first in the head; any other head content must come *after* these tags -->
{% if site.enforce_https %}
<script type="text/javascript">
if (("{{ site.enforce_https }}" == window.location.host) && (window.location.protocol != "https:")) {
window.location = window.location.toString().replace(/^http:/, "https:");
}
</script>
{% endif %}
<title>{% if page.title %}{{ page.title }} - {{ site.title }}{% else %}{{ site.title }}{% endif %}</title>
<meta name="author" content="{{ site.author.name }}">
<meta name="description" content="{% if page.excerpt %}{{ page.excerpt | strip_html | strip_newlines | truncate: 160 }}{% else %}{{ site.description }}{% endif %}">
<link rel="canonical" href="{{ page.url | replace:'index.html','' | prepend: site.baseurl | replace: '//', '/' | prepend: site.url }}">
<link rel="alternate" type="application/rss+xml" title="{{ site.title }}" href="{{ "/feed.xml" | prepend: site.baseurl | prepend: site.url }}" />
<!-- OpenSearch -->
<link rel="search" type="application/opensearchdescription+xml" title="Search {{ site.title }}" href="{{ '/opensearch.xml' | prepend: site.baseurl | replace: '//', '/' | prepend: site.url }}" />
<!-- Open Graph -->
{% if page.is_post %}
<meta property="article:published_time" content="{{ page.date }}"/>
{% endif %}
{% if site.facebook.app_id %}
<meta property="fb:app_id" content="{{ site.facebook.app_id }}" />
{% endif %}
{% if site.facebook.page_id %}
<meta property="fb:page_id" content="{{ site.facebook.page_id }}" />
{% endif %}
{% if site.author.name %}
<meta property="og:author" content="{{ site.author.name }}" />
{% endif %}
<meta property="og:description" content="{% if page.excerpt %}{{ page.excerpt | strip_html | strip_newlines | truncate: 160 }}{% else %}{{ site.description }}{% endif %}" />
{% if site.author.email %}
<meta property="og:email" content="{{ site.author.email }}" />
{% endif %}
{% if page.image %}
<meta property="og:image" content="{{ page.image | prepend: site.baseurl | replace: '//', '/' | prepend: site.url }}" />
{% elsif site.image %}
<meta property="og:image" content="{{ site.image | prepend: site.baseurl | replace: '//', '/' | prepend: site.url }}" />
{% endif %}
<meta property="og:site_name" content="{{ site.title }}" />
<meta property="og:title" content="{% if page.title %}{{ page.title }}{% else %}{{ site.title }}{% endif %}" />
<meta property="og:type" content="{% if page.is_post %}{{ "article" }}{% else %}{{ "website" }}{% endif %}" />
<meta property="og:url" content="{{ page.url | replace:'index.html', '' | prepend: site.baseurl | replace: '//', '/' | prepend: site.url }}" />
<!-- Twitter Cards -->
<meta name="twitter:card" content="summary" />
{% if site.twitter_username %}
<meta name="twitter:site" content="{{ site.twitter_username | prepend: "@" }}" />
{% endif %}
<!-- Favicons (made with RealFaviconGenerator.net) -->
<link rel="apple-touch-icon" sizes="180x180" href="{{ "/assets/favicons/apple-touch-icon.png?v=2" | prepend: site.baseurl | replace: '//', '/' | prepend: site.url }}">
<link rel="icon" type="image/png" sizes="32x32" href="{{ "/assets/favicons/favicon-32x32.png?v=2" | prepend: site.baseurl | replace: '//', '/' | prepend: site.url }}">
<link rel="icon" type="image/png" sizes="16x16" href="{{ "/assets/favicons/favicon-16x16.png?v=2" | prepend: site.baseurl | replace: '//', '/' | prepend: site.url }}">
<link rel="manifest" href="{{ "/assets/favicons/manifest.json?v=2" | prepend: site.baseurl | replace: '//', '/' | prepend: site.url }}">
<link rel="mask-icon" href="{{ "/assets/favicons/safari-pinned-tab.svg?v=2" color="#2D643E" | prepend: site.baseurl | replace: '//', '/' | prepend: site.url }}" color="#2D643E">
<link rel="shortcut icon" href="{{ "/assets/favicons/favicon.ico?v=2" | prepend: site.baseurl | replace: '//', '/' | prepend: site.url }}">
<meta name="msapplication-config" content="{{ "/assets/favicons/browserconfig.xml?v=2" | prepend: site.baseurl | replace: '//', '/' | prepend: site.url }}">
<meta name="theme-color" content="#003917">
<!-- CSS -->
<link rel="stylesheet" type="text/css" href="https://fonts.googleapis.com/css?family=Roboto:300,400,500,700">
<link rel="stylesheet" type="text/css" href="https://fonts.googleapis.com/icon?family=Material+Icons">
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-material-design/0.5.10/css/bootstrap-material-design.min.css">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-material-design/0.5.10/css/ripples.min.css">
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css">
<link rel="stylesheet" href="{{ "/assets/css/syntax.css" | prepend: site.baseurl }}">
<link rel="stylesheet" href="{{ "/assets/css/main.css" | prepend: site.baseurl }}">
<!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries -->
<!-- WARNING: Respond.js doesn't work if you view the page via file:// -->
<!--[if lt IE 9]>
<script src="https://oss.maxcdn.com/html5shiv/3.7.3/html5shiv.min.js"></script>
<script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
<![endif]-->
<!-- JS -->
<script src="https://code.jquery.com/jquery-1.12.4.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js" integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-material-design/0.5.10/js/material.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-material-design/0.5.10/js/ripples.min.js"></script>
<script src="{{ "/assets/js/main.js" | prepend: site.baseurl }}"></script>
{% if site.google.analytics_property_id %}
<!-- Google Analytics -->
<script>
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
ga('create', '{{ site.google.analytics_property_id }}', 'auto');
ga('send', 'pageview', {
'page': '{{ page.url | replace:"index.html","" | prepend: site.baseurl | replace: "//", "/" | prepend: site.url }}',
'title': '{% if page.title %}{{ page.title }}{% else %}{{ site.title }}{% endif %}'
});
</script>
<!-- End Google Analytics -->
{% endif %}
{% if site.google.adsense.publisher_id %}
<!-- Google AdSense -->
<script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
{% endif %}
{% if site.addthis_profile_id %}
<!-- AddThis -->
<script async src="//s7.addthis.com/js/300/addthis_widget.js#pubid={{ site.addthis_profile_id }}"></script>
<script type="text/javascript">
var addthis_config = {
data_track_clickback: true,
data_track_addressbar: true,
ui_language: '{{ site.lang }}'
};
var addthis_share = {
url: '{{ page.url | prepend: site.baseurl | replace: "//", "/"" | prepend: site.url }}',
title: document.title,
description: '{% if page.excerpt %}{{ page.excerpt | strip_html | strip_newlines | truncatewords: 55 }}{% else %}{{ site.description }}{% endif %}'
};
</script>
<!-- End AddThis -->
{% endif %}
<!-- Matomo -->
<script type="text/javascript">
var _paq = _paq || [];
/* tracker methods like "setCustomDimension" should be called before "trackPageView" */
_paq.push(["setDoNotTrack", true]);
_paq.push(['trackPageView']);
_paq.push(['enableLinkTracking']);
(function() {
var u="//analytics.depau.eu/";
_paq.push(['setTrackerUrl', u+'piwik.php']);
_paq.push(['setSiteId', '3']);
var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0];
g.type='text/javascript'; g.async=true; g.defer=true; g.src=u+'piwik.js'; s.parentNode.insertBefore(g,s);
})();
</script>
<noscript><p><img src="//analytics.depau.eu/piwik.php?idsite=3&amp;rec=1" style="border:0;" alt="" /></p></noscript>
<!-- End Matomo Code -->
<link rel="stylesheet" type="text/css" href="//cdnjs.cloudflare.com/ajax/libs/cookieconsent2/3.1.0/cookieconsent.min.css" />
<script src="//cdnjs.cloudflare.com/ajax/libs/cookieconsent2/3.1.0/cookieconsent.min.js"></script>
<script>
window.addEventListener("load", function(){
window.cookieconsent.initialise({
"palette": {
"popup": {
"background": "#2d643e",
"text": "#ffffff"
},
"button": {
"background": "#a3c439",
"text": "#ffffff"
}
},
"theme": "edgeless",
"position": "bottom-right",
"content": {
"message": "This website uses cookies for anonymized traffic analytics.\nTo opt-out, enable the \"Do Not Track\" option in your browser's settings."
}
})});
</script>
</head>

View file

@ -0,0 +1,37 @@
<!-- Fixed navbar -->
<nav class="navbar navbar-default navbar-fixed-top" role="navigation">
<div class="container">
<div class="navbar-header">
<button type="button" class="navbar-toggle collapsed pull-left" data-toggle="collapse" data-target="#navbar" aria-expanded="false" aria-controls="navbar">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<a class="navbar-brand" href="{{ site.baseurl }}/">{{ site.title }}</a>
</div><!--.navbar-header-->
<div class="collapse navbar-collapse" id="navbar">
<ul class="nav navbar-nav navbar-right">
{% if site.navigation %}
{% for link in site.navigation %}
<li>
<a href="{{ link.url | prepend: site.baseurl }}">{{ link.title }}</a>
<li>
{% endfor %}
{% else %}
{% for page in site.pages %}
{% if page.title %}
{% if page.permalink != "/" %}
<li>
<a href="{{ page.url | prepend: site.baseurl }}">{{ page.title }}</a>
<li>
{% endif %}
{% endif %}
{% endfor %}
{% endif %}
</ul>
</div><!--#navbar-->
</div><!--.container-->
</nav>

10
docs/_includes/image.html Normal file
View file

@ -0,0 +1,10 @@
<div class='image no-ads-here text-center' itemscope itemtype='http://schema.org/ImageObject'>
<a href='{% if include.link %}{{ include.link }}{% else %}{{ include.src }}{% endif %}' title='{{ include.caption }}'>
<img src='{{ include.src }}' alt='{{ include.caption }}' class='img-responsive img-thumbnail' itemprop='contentUrl'{% if include.style %} style="{{ include.style }}"{% endif %}>
</a>
{% if include.caption %}
<em class='caption' itemprop='description'>
{{ include.caption | markdownify }}
</em>
{% endif %}
</div>

137
docs/_includes/sidebar.html Normal file
View file

@ -0,0 +1,137 @@
<div class="panel panel-default">
<div class="panel-heading">
<h3><a name="about"></a>About</h3>
</div>
<div class="panel-body" itemprop="publisher" itemscope itemtype="http://schema.org/Organization">
<p class='text-center' itemprop='logo' itemscope itemtype='http://schema.org/ImageObject'>
<a href='{{ site.image | prepend: site.baseurl | replace: "//", "/" | prepend: site.url }}' itemprop='url'>
<img src='{{ site.image | prepend: site.baseurl | replace: "//", "/" | prepend: site.url }}' class='img-responsive img-thumbnail'>
</a>
<!--<meta itemprop="width" content=""/>--><!-- TODO Image width -->
<!--<meta itemprop="height" content=""/>--><!-- TODO Image height -->
</p>
<p class="lead text-center">
<a href="{{ site.baseurl | prepend: site.url }}" itemprop="url">
<span itemprop="name">{{ site.title }}</span>
</a>
</p>
<p class="text" itemprop="description">
{{ site.description }}
</p>
<p class="text-center">
<a href="https://github.com/Depau/EtchDroid">
<img src="/assets/img/get-from-github-small.png"/>
</a>
</p>
</div><!-- .panel-body -->
</div><!-- .panel -->
<div class="panel panel-default">
<div class="panel-heading">
<h3><a name="author"></a>Author</h3>
</div>
<div class="panel-body" itemprop="author" itemscope itemtype="http://schema.org/Person">
{% if site.author.name %}
<p class="lead" itemprop="name">
{{ site.author.name }}
</p>
{% endif %}
<ul class="contact-list list-unstyled">
{% if site.author.site %}
<li><a href="{{ site.author.site }}" itemprop="url"><i class="fa fa-globe"></i> {{ site.author.site }}</a></li>
{% endif %}
{% if site.author.email %}
<li><a href="mailto:{{ site.author.email }}" itemprop="email"><i class="fa fa-envelope"></i> {{ site.author.email }}</a></li>
{% endif %}
</ul>
{% if site.addthis_profile_id %}
<!-- AddThis Follow Buttons -->
<div class="addthis_toolbox addthis_32x32_style addthis_default_style center-block">
{% if site.facebook.username %}
<a href="https://facebook.com/{{ site.facebook.username }}" class="addthis_button_facebook_follow" addthis:userid="{{ site.facebook_username }}" itemprop="sameAs"></a>
{% endif %}
{% if site.twitter_username %}
<a href="https://twitter.com/{{ site.twitter_username }}" class="addthis_button_twitter_follow" addthis:userid="{{ site.twitter_username }}" itemprop="sameAs"></a>
{% endif %}
{% if site.linkedin_username %}
<a href="https://www.linkedin.com/in/{{ site.linkedin_username }}" class="addthis_button_linkedin_follow" addthis:userid="{{ site.linkedin_username }}" itemprop="sameAs"></a>
{% endif %}
{% if site.google_plus_user_id %}
<a href="https://plus.google.com/{{ site.google_plus_user_id }}" class="addthis_button_google_follow" addthis:userid="{{ site.google_plus_user_id }}" itemprop="sameAs"></a>
{% endif %}
{% if site.youtube.profile and site.youtube.name %}
<a href="https://youtube.com/{{ site.youtube.profile }}/{{ site.youtube.name }}" class="addthis_button_youtube_follow" addthis:userid="{{ site.youtube.name }}" itemprop="sameAs"></a>
{% endif %}
{% if site.foursquare_username %}
<a href="https://foursquare.com/{{ site.foursquare_username }}" class="addthis_button_foursquare_follow" addthis:userid="{{ site.foursquare_username }}" itemprop="sameAs"></a>
{% endif %}
{% if site.github_username %}
<a href="https://github.com/{{ site.github_username }}" class="addthis_button_github_follow" addthis:userid="{{ site.github_username }}" itemprop="sameAs"></a>
{% endif %}
<a href="{{ "/feed.xml" | prepend: site.baseurl }}" class="addthis_button_rss_follow"></a>
</div>
<!-- AddThis Follow Buttons End -->
{% else %}
<ul class="social-media-list list-unstyled">
{% if site.facebook.username %}
<li>
<a href="https://facebook.com/{{ site.facebook.username }}" itemprop="sameAs">
<i class="fa fa-facebook-official"></i> {{ site.facebook.username }}
</a>
</li>
{% endif %}
{% if site.twitter_username %}
<li>
<a href="https://twitter.com/{{ site.twitter_username }}" itemprop="sameAs">
<i class="fa fa-twitter"></i> {{ site.twitter_username }}
</a>
</li>
{% endif %}
{% if site.linkedin_username %}
<li>
<a href="https://www.linkedin.com/in/{{ site.linkedin_username }}" itemprop="sameAs">
<i class="fa fa-linkedin-square"></i> {{ site.linkedin_username }}
</a>
</li>
{% endif %}
{% if site.google.user_id %}
<li>
<a href="https://plus.google.com/{{ site.google.user_id }}" itemprop="sameAs">
<i class="fa fa-google-plus-square"></i> {{ site.google.user_id }}
</a>
</li>
{% endif %}
{% if site.youtube.profile and site.youtube.name %}
<li>
<a href="https://youtube.com/{{ site.youtube.profile }}/{{ site.youtube.username }}" itemprop="sameAs">
<i class="fa fa-youtube-play"></i> {{ site.youtube.name }}
</a>
</li>
{% endif %}
{% if site.foursquare_username %}
<li>
<a href="https://foursquare.com/{{ site.foursquare_username }}" itemprop="sameAs">
<i class="fa fa-foursquare"></i> {{ site.foursquare_username }}
</a>
</li>
{% endif %}
{% if site.github_username %}
<li>
<a href="https://github.com/{{ site.github_username }}" itemprop="sameAs">
<i class="fa fa-github"></i> {{ site.github_username }}
</a>
</li>
{% endif %}
</ul>
{% endif %}
</div><!-- .panel-body -->
</div><!-- .panel -->
{% if site.google.adsense.sidebar_ad_unit %}
<div class="panel panel-default">
<div class="panel-body">
{% include adsense.html id="sidebar_ad_unit" ad_slot=site.google.adsense.sidebar_ad_unit %}
</div><!-- .col-xs-12 -->
</div><!-- .row -->
{% endif %}

View file

@ -0,0 +1,4 @@
<div class="alert alert-success atualizacao" role="alert">
<span class="glyphicon glyphicon-refresh" aria-hidden="true"></span> <strong>Update{% if include.date %} ({{ include.date }}){% endif %}:</strong>
{{ include.message | markdownify }}
</div>

View file

@ -0,0 +1,3 @@
<div class="embed-responsive embed-responsive-16by9">
<iframe class="embed-responsive-item" src="http://www.youtube.com/embed/{{ include.id }}" allowfullscreen></iframe>
</div>

View file

@ -1,56 +1,28 @@
<!DOCTYPE html>
<html lang="{{ site.lang | default: "en-US" }}">
<head>
<html{% if site.lang %} lang="{{ site.lang }}"{% endif %} prefix="
{% if site.addthis_profile_id %}addthis: http://www.addthis.com/help/api-spec{% endif %}
og: http://ogp.me/ns#
fb: http://ogp.me/ns/fb#
article: http://ogp.me/ns/article#">
<style>
.store-badge img {
max-height: 80px;
}
</style>
{% include head.html %}
{% if site.google_analytics %}
<script async src="https://www.googletagmanager.com/gtag/js?id={{ site.google_analytics }}"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', '{{ site.google_analytics }}');
</script>
{% endif %}
<meta charset="UTF-8">
<body itemscope itemtype="http://schema.org/{% if page.is_post %}{{ "BlogPosting" }}{% else %}{{ "WebPage" }}{% endif %}">
{% seo %}
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="theme-color" content="#157878">
<meta name="apple-mobile-web-app-status-bar-style" content="black-translucent">
<link rel="stylesheet" href="{{ '/assets/css/style.css?v=' | append: site.github.build_revision | relative_url }}">
</head>
<body>
<header class="page-header" role="banner">
<h1 class="project-name">{{ site.title | default: site.github.repository_name }}</h1>
<h2 class="project-tagline">{{ site.description | default: site.github.project_tagline }}</h2>
{% if site.github.is_project_page %}
<a href="{{ site.github.repository_url }}" class="store-badge">
<img src="img/get-from-github.png"/>
</a>
{% endif %}
<a href="https://f-droid.org/packages/eu.depau.etchdroid/" class="store-badge">
<img src="img/get-from-fdroid.png"/>
</a>
<a href="https://play.google.com/store/apps/details?id=eu.depau.etchdroid" class="store-badge">
<img src="img/get-from-googleplay.png"/>
</a>
</header>
{% include header.html %}
<main id="content" class="main-content" role="main">
{{ content }}
<div class="container">
<div class="row">
<div class='col-sm-8'>
{{ content }}
</div>
<div class="col-sm-4">
{% include sidebar.html %}
</div>
</div>
</div>
<footer class="site-footer">
{% if site.github.is_project_page %}
<span class="site-footer-owner"><a href="{{ site.github.repository_url }}">{{ site.github.repository_name }}</a> is maintained by <a href="{{ site.github.owner_url }}">{{ site.github.owner_name }}</a>.</span>
{% endif %}
<span class="site-footer-credits">This page was generated by <a href="https://pages.github.com">GitHub Pages</a>.</span>
</footer>
</main>
</body>
{% include footer.html %}
</body>
</html>

25
docs/_layouts/page.html Normal file
View file

@ -0,0 +1,25 @@
---
layout: default
---
<div class="blog-post panel panel-default">
<header class="panel-heading">
<h1 class="blog-post-title" itemprop="headline name">
<a class="blog-post-link" href="{{ page.url | prepend: site.baseurl | replace: '//', '/' }}" itemprop="url">
{{ page.title }}
</a>
</h1>
</header>
<article class="blog-post-content panel-body" itemprop="mainContentOfPage" itemscope itemtype="http://schema.org/WebPageElement">
{% if site.google.adsense.content_ad_unit_1 %}
{% include adsense.html id="content_ad_unit_1" ad_slot=site.google.adsense.content_ad_unit_1 %}
{% endif %}
<div class="row">
<div class="col-xs-12">
{{ content }}
</div>
</div>
</article>
</div><!-- .blog-post -->

96
docs/_layouts/post.html Normal file
View file

@ -0,0 +1,96 @@
---
layout: default
---
<div class="blog-post panel panel-default">
<header class="panel-heading">
<h1 class="blog-post-title" itemprop="headline name">
<a class="blog-post-link" href="{{ page.url | prepend: site.baseurl | replace: '//', '/' }}" itemprop="mainEntityOfPage url">
{{ page.title }}
</a>
</h1>
<div class="blog-post-meta row">
<div class='col-sm-6'>
<p class="blog-post-date" itemprop="datePublished" content="{{ page.date | date: "%Y-%m-%d" }}">
{{ page.date | date: "%b %-d, %Y" }}
</p>
<!--<meta itemprop="dateModified" content="" />--><!-- TODO Last modified date -->
</div>
<div class='col-sm-6'>
{% if site.addthis_profile_id %}
<div class='blog-post-share'>
<!-- AddThis Sharing Buttons -->
<div class="addthis_toolbox addthis_default_style">
<a class="addthis_button_facebook"></a>
<a class="addthis_button_twitter"{% if site.twitter_username %} data-via="{{ site.twitter_username }}"{% endif %}></a>
<a class="addthis_button_google_plusone_share"></a>
<a class="addthis_button_favorites"></a>
<a class="addthis_button_compact"></a>
<a class="addthis_counter addthis_bubble_style"></a>
</div>
<!-- AddThis Sharing Buttons End -->
</div><!-- .blog-post-share -->
{% endif %}
</div><!-- .col-sm-6 -->
</div><!-- .blog-post-meta -->
</header>
<article class="blog-post-content panel-body">
{% if site.google.adsense.content_ad_unit_1 %}
{% include adsense.html id="content_ad_unit_1" ad_slot=site.google.adsense.content_ad_unit_1 %}
{% endif %}
<div class="row" itemprop="articleBody mainEntity">
<div class="col-xs-12">
{{ content }}
</div>
</div>
{% if site.addthis_profile_id %}
<!-- AddThis Sharing Buttons -->
<div class="gap"></div>
<h2>Did you like it? What about sharing?</h2>
<div class="addthis_toolbox addthis_default_style addthis_32x32_style">
<a class="addthis_button_facebook"></a>
<a class="addthis_button_twitter"></a>
<a class="addthis_button_google_plusone_share"></a>
<a class="addthis_button_email"></a>
<a class="addthis_button_favorites"></a>
<a class="addthis addthis_button_print"></a>
<a class="addthis_button_pdfonline"></a>
<a class="addthis_button_compact"></a>
<a class="addthis_counter addthis_bubble_style"></a>
</div>
<!-- AddThis Sharing Buttons End -->
{% endif %}
{% if site.disqus_shortname %}
<!-- Disqus -->
<div class="gap"></div>
<h2>Comments</h2>
<div class="row">
<div class="col-xs-12">
<div id="disqus_thread"></div>
<script type="text/javascript">
/* * * CONFIGURATION VARIABLES * * */
var disqus_shortname = '{{ site.disqus_shortname }}';
var disqus_url = '{{ page.url | prepend: site.baseurl | replace: '//', '/' | prepend: site.url }}';
/* * * DON'T EDIT BELOW THIS LINE * * */
(function() {
var dsq = document.createElement('script');
dsq.type = 'text/javascript';
dsq.async = true;
dsq.src = '//' + disqus_shortname + '.disqus.com/embed.js';
(document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(dsq);
})();
</script>
<noscript>
<p>Please <a href="http://www.enable-javascript.com/" target="_blank">enable JavaScript</a> to view the <a href="https://disqus.com/?ref_noscript" rel="nofollow">comments powered by Disqus</a>.</p>
</noscript>
</div><!-- .col-xs-12 -->
</div><!-- .row -->
<!-- Disqus End -->
{% endif %}
</article>
</div><!-- .blog-post -->

324
docs/assets/css/main.css Normal file
View file

@ -0,0 +1,324 @@
html {
min-height: 100%;
position: relative;
}
body {
background-color: #E5E5E5;
padding-top: 70px;
}
@media (min-width: 992px) {
.container {
width: 890px;
}
}
@media (min-width: 1074px) {
.container {
width: 970px;
}
}
@media (min-width: 1200px) {
.container {
width: 1170px;
}
}
body, h1, h2, h3, h4, h5, h6 {
font-weight: 400;
}
.panel-heading h1,
.panel-heading h2,
.panel-heading h3,
.panel-heading h4,
.panel-heading h5,
.panel-heading h6 {
margin-top: 0;
}
.gap {
margin-bottom: 30px;
}
.gap-small {
margin-bottom: 15px;
}
.panel-default > .panel-heading {
color: #212121;
background-color: #F5F5F5;
}
/* Brand */
@media (min-width: 350px) {
a.navbar-brand {
background: url(../favicons/favicon-32x32.svg) 15px no-repeat;
padding-left: 60px !important;
}
}
/* Footer */
.footer {
background-color: #2D643E;
bottom: 0;
position: absolute;
width: 100%;
}
.footer, .footer a {
color: rgba(255, 255, 255, 0.84);
}
.footer > .container {
padding: 15px;
}
@media (max-width: 469px) {
body {
/* Margin bottom by footer height */
margin-bottom: 150px;
}
.footer {
/* Set the fixed height of the footer here */
height: 150px;
}
}
@media (min-width: 470px) and (max-width: 767px) {
body {
margin-bottom: 130px;
}
.footer {
height: 130px;
}
}
@media (min-width: 768px) and (max-width: 991px) {
body {
margin-bottom: 110px;
}
.footer {
height: 110px;
}
}
@media (min-width: 992px) {
body {
margin-bottom: 60px;
}
.footer {
height: 60px;
}
}
.contact-list, .social-media-list {
margin-left: 0px;
padding: 0px;
}
/* Navbar with collapsible search bar */
/* Search based on: https://bootsnipp.com/snippets/a6aV0 */
@media (max-width: 767px) {
.navbar-header, .navbar-brand {
float: left;
}
#navbar {
clear: both;
}
}
#search-button {
color: rgba(255,255,255,0.84);
cursor: pointer;
margin-left: 15px;
margin-right: -15px;
padding: 15px;
}
@media (min-width: 1200px) {
#search-button {
padding-top: 20px;
padding-bottom: 20px;
}
}
#search-bar {
background-color: #F5F5F5;
position: absolute;
-moz-transform: rotateX(-90deg);
-ms-transform: rotateX(-90deg);
-o-transform: rotateX(-90deg);
-webkit-transform: rotateX(-90deg);
transform: rotateX(-90deg);
-moz-transform-origin: 0 0 0;
-ms-transform-origin: 0 0 0;
-o-transform-origin: 0 0 0;
-webkit-transform-origin: 0 0 0;
transform-origin: 0 0 0;
-moz-transition: all 0.3s ease-in-out;
-ms-transition: all 0.3s ease-in-out;
-o-transition: all 0.3s ease-in-out;
-webkit-transition: all 0.3s ease-in-out;
transition: all 0.3s ease-in-out;
visibility: hidden;
width: 100%;
}
#search-bar.open {
-webkit-transform: rotateX(0deg);
-moz-transform: rotateX(0deg);
-o-transform: rotateX(0deg);
-ms-transform: rotateX(0deg);
transform: rotateX(0deg);
visibility: visible;
}
#search-bar .form-group {
margin: 0;
padding: 0;
}
#search-bar .input-group-btn {
padding: 0;
}
#search-bar .input-group-btn > .btn {
border-radius: 0px;
margin: 0;
padding: 15px;
}
#search-input {
font-size: 18px;
height: 50px;
margin: 0;
}
/* Blog posts */
.blog-post-link,
.blog-post-link:focus,
.blog-post-link:hover {
color: #444;
}
.blog-post-meta {
color: #999;
}
@media (max-width: 767px) {
.blog-post-date, .blog-post-share {
display: block;
margin-left: auto;
margin-right: auto;
text-align: center;
}
.blog-post-share {
width: 140px;
}
}
@media (min-width: 768px) {
.blog-post-date {
text-align: left;
}
.blog-post-share {
float: right !important;
}
.pager {
margin-bottom: 60px;
}
}
/* http://getbootstrap.com/getting-started/#third-parties */
.reset-box-sizing,
.reset-box-sizing *,
.reset-box-sizing *:before,
.reset-box-sizing *:after {
-webkit-box-sizing: content-box;
-moz-box-sizing: content-box;
box-sizing: content-box;
}
/* Google AdSense */
.adsbygoogle {
display: block;
margin: 1em;
}
/* Images */
em.caption {
display: block;
margin-top: 1em;
}
.embed-responsive {
margin: 0px 0px 1em;
}
/* AddThis */
.at4-icon.aticon-github {
background: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEwAACxMBAJqcGAAAAnBJREFUWIW11s+LjWEUB/DPXMYMhuEfIMaQUkiykliKRBELNn4slZSSko383CPMUpZKsmKrlGYG2VAjmzGT/MigO35ci+e93ds7z/ve97qvbz2b55znfM9znnOec7oUxwLswDasxXIsTGRfMIZRPMIDfG3Ddi5WYgjfUSu4vuEWVnRCPBdX8bMN4vSaxmX0tks+iJcdEKfXKAaKkq/HZInk9TUh5E7Lm/8P8mYnMiMxz8ywj+DuPzr1HneE8KefI5oTVyNGdieybhzGeLL/Ec+EknuMYXxOZO9wCLOTs/sidi+lyVeKZ3u6jPqF+s/CCuG/aMbqiN1pqacYiijV0kr/iFUZtm/WFRbK/mR2leDAngzbU+iDAxkKY0LIO0U/3mZw7COEIiY8UAJ5HQczOK7D04jgB3pKdGAuqhGeJ/AhInheInkdryI8ExWNltqM6n9wYDqyt6iCroigjORLY3Fkr4v4E1SVmwPz8SvCM1kRSiSNOdhSogNbMSuyP1YR/vEYjpfoQJatYbI/oprQVDrFkRz7e8n/in/hpHj4WmE2TuF3hu0pTY3rdpPgHPbjRdPea5zGBvnJ2YuNOIM3OTev4UbzwUGhTmv4hO2Jdy8iB+9lkHfhYQvS5iqb0davpMKzVJjhvqQOb8qJwOaCDlyMHe5N3fhasr8M54XGcUxj0omhrwD5qJxnHBAGx5owIe3MIYuhuwX5eHKhXKzTGEL/4D5O4CjOtjg7pwX5mqI3GRA6YsxQrHfU0ZtxZkSBm8eMXdaojvrKy4F5Kd0qLuiwrwwINTslDCp5n1JPQjolJG3eBN02+rCkgN7SRLcQ/gKnLYoRyhei4QAAAABJRU5ErkJggg==');
}
.addthis_toolbox.center-block {
display: table;
}
/* Code highlighting */
/* https://demisx.github.io/jekyll/2014/01/13/improve-code-highlighting-in-jekyll.html */
.highlight .lineno {
-moz-user-select: none;
-o-user-select: none;
-webkit-user-select: none;
color: #ccc;
}
.highlight .lineno::-moz-selection,
.highlight .lineno::selection {
background-color: transparent;
}
.highlight .lineno {
border-right:1px solid #ccc;
display: inline-block;
padding: 0 5px;
}
.highlight pre code {
display: block;
overflow-x: auto;
white-space: pre;
word-wrap: normal;
}
.navbar, .navbar.navbar-default {
background-color: #2D643E;
-webkit-box-shadow: 0px 3px 11px -4px rgba(0,0,0,0.6);
-moz-box-shadow: 0px 3px 11px -4px rgba(0,0,0,0.6);
box-shadow: 0px 3px 11px -4px rgba(0,0,0,0.6);
}

View file

@ -0,0 +1,60 @@
.highlight { background: #ffffff; }
.highlight .c { color: #999988; font-style: italic } /* Comment */
.highlight .err { color: #a61717; background-color: #e3d2d2 } /* Error */
.highlight .k { font-weight: bold } /* Keyword */
.highlight .o { font-weight: bold } /* Operator */
.highlight .cm { color: #999988; font-style: italic } /* Comment.Multiline */
.highlight .cp { color: #999999; font-weight: bold } /* Comment.Preproc */
.highlight .c1 { color: #999988; font-style: italic } /* Comment.Single */
.highlight .cs { color: #999999; font-weight: bold; font-style: italic } /* Comment.Special */
.highlight .gd { color: #000000; background-color: #ffdddd } /* Generic.Deleted */
.highlight .gd .x { color: #000000; background-color: #ffaaaa } /* Generic.Deleted.Specific */
.highlight .ge { font-style: italic } /* Generic.Emph */
.highlight .gr { color: #aa0000 } /* Generic.Error */
.highlight .gh { color: #999999 } /* Generic.Heading */
.highlight .gi { color: #000000; background-color: #ddffdd } /* Generic.Inserted */
.highlight .gi .x { color: #000000; background-color: #aaffaa } /* Generic.Inserted.Specific */
.highlight .go { color: #888888 } /* Generic.Output */
.highlight .gp { color: #555555 } /* Generic.Prompt */
.highlight .gs { font-weight: bold } /* Generic.Strong */
.highlight .gu { color: #aaaaaa } /* Generic.Subheading */
.highlight .gt { color: #aa0000 } /* Generic.Traceback */
.highlight .kc { font-weight: bold } /* Keyword.Constant */
.highlight .kd { font-weight: bold } /* Keyword.Declaration */
.highlight .kp { font-weight: bold } /* Keyword.Pseudo */
.highlight .kr { font-weight: bold } /* Keyword.Reserved */
.highlight .kt { color: #445588; font-weight: bold } /* Keyword.Type */
.highlight .m { color: #009999 } /* Literal.Number */
.highlight .s { color: #d14 } /* Literal.String */
.highlight .na { color: #008080 } /* Name.Attribute */
.highlight .nb { color: #0086B3 } /* Name.Builtin */
.highlight .nc { color: #445588; font-weight: bold } /* Name.Class */
.highlight .no { color: #008080 } /* Name.Constant */
.highlight .ni { color: #800080 } /* Name.Entity */
.highlight .ne { color: #990000; font-weight: bold } /* Name.Exception */
.highlight .nf { color: #990000; font-weight: bold } /* Name.Function */
.highlight .nn { color: #555555 } /* Name.Namespace */
.highlight .nt { color: #000080 } /* Name.Tag */
.highlight .nv { color: #008080 } /* Name.Variable */
.highlight .ow { font-weight: bold } /* Operator.Word */
.highlight .w { color: #bbbbbb } /* Text.Whitespace */
.highlight .mf { color: #009999 } /* Literal.Number.Float */
.highlight .mh { color: #009999 } /* Literal.Number.Hex */
.highlight .mi { color: #009999 } /* Literal.Number.Integer */
.highlight .mo { color: #009999 } /* Literal.Number.Oct */
.highlight .sb { color: #d14 } /* Literal.String.Backtick */
.highlight .sc { color: #d14 } /* Literal.String.Char */
.highlight .sd { color: #d14 } /* Literal.String.Doc */
.highlight .s2 { color: #d14 } /* Literal.String.Double */
.highlight .se { color: #d14 } /* Literal.String.Escape */
.highlight .sh { color: #d14 } /* Literal.String.Heredoc */
.highlight .si { color: #d14 } /* Literal.String.Interpol */
.highlight .sx { color: #d14 } /* Literal.String.Other */
.highlight .sr { color: #009926 } /* Literal.String.Regex */
.highlight .s1 { color: #d14 } /* Literal.String.Single */
.highlight .ss { color: #990073 } /* Literal.String.Symbol */
.highlight .bp { color: #999999 } /* Name.Builtin.Pseudo */
.highlight .vc { color: #008080 } /* Name.Variable.Class */
.highlight .vg { color: #008080 } /* Name.Variable.Global */
.highlight .vi { color: #008080 } /* Name.Variable.Instance */
.highlight .il { color: #009999 } /* Literal.Number.Integer.Long */

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.5 KiB

View file

@ -0,0 +1,12 @@
---
layout: null
---
<?xml version="1.0" encoding="utf-8"?>
<browserconfig>
<msapplication>
<tile>
<square150x150logo src="{{ "/assets/favicons/mstile-150x150.png?v=2" | prepend: site.baseurl | replace: '//', '/' | prepend: site.url }}"/>
<TileColor>#2D643E</TileColor>
</tile>
</msapplication>
</browserconfig>

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.5 KiB

View file

@ -0,0 +1,127 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="32"
height="32"
version="1.1"
viewBox="-147 -70 32 32"
id="svg33"
sodipodi:docname="favicon-32x32.svg"
inkscape:export-filename="/home/depau/AndroidStudioProjects/EtchDroid/docs/assets/favicons/mstile-144x144.png"
inkscape:export-xdpi="128"
inkscape:export-ydpi="128"
inkscape:version="0.92.2 2405546, 2018-03-11">
<sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="2560"
inkscape:window-height="1311"
id="namedview19"
showgrid="false"
inkscape:zoom="18.101466"
inkscape:cx="8.71074"
inkscape:cy="12.255244"
inkscape:window-x="0"
inkscape:window-y="55"
inkscape:window-maximized="1"
inkscape:current-layer="svg33" />
<metadata
id="metadata37">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<defs
id="defs7">
<linearGradient
id="linearGradient5356"
x1="-173.9859"
x2="20.193203"
y1="252.52081"
y2="252.52081"
gradientTransform="matrix(0.78544799,0.78544799,-0.78544799,0.78544799,563.38515,24.524301)"
gradientUnits="userSpaceOnUse">
<stop
stop-opacity=".169"
offset="0"
id="stop2" />
<stop
stop-opacity="0"
offset="1"
id="stop4" />
</linearGradient>
</defs>
<g
transform="matrix(0.07266765,0,0,0.07266765,-138.92084,-66.164008)"
id="g31">
<path
id="path9"
d="m 224.44066,-35.008122 0.85797,0.475584 c 2.55974,1.418887 3.47819,4.621907 2.05931,7.181647 L 148.21329,115.42984 c -1.41889,2.55974 -4.62191,3.47819 -7.18165,2.0593 l -0.85797,-0.47558 c -2.55974,-1.41889 -3.47819,-4.6219 -2.0593,-7.18164 l 79.14465,-142.780733 c 1.41889,-2.55974 4.6219,-3.478196 7.18164,-2.059309 z"
style="fill:#a4c639;stroke-width:0"
inkscape:connector-curvature="0" />
<path
id="path11"
d="m -13.212145,-35.460534 -0.857974,0.475583 c -2.559741,1.418887 -3.47819,4.621899 -2.059302,7.18164 L 63.01523,114.97742 c 1.418888,2.55974 4.621902,3.4782 7.181643,2.05931 l 0.857974,-0.47558 c 2.559741,-1.41889 3.478186,-4.62191 2.059299,-7.18165 L -6.0305053,-33.401231 c -1.4188879,-2.559742 -4.6218987,-3.47819 -7.1816397,-2.059303 z"
style="fill:#a4c639;stroke-width:0"
inkscape:connector-curvature="0" />
<path
id="path13"
d="M 108.99219,3.591797 A 182.06224,168.05745 0 0 0 -73.013672,170.60938 H 291.01562 A 182.06224,168.05745 0 0 0 108.99219,3.591797 Z"
style="fill:#a4c639;stroke-width:2.00068402"
inkscape:connector-curvature="0" />
<path
style="opacity:1;fill:#ffffff;stroke:none;stroke-width:27.98797607"
d="m 40.483015,89.601019 c 0,8.587406 -6.96145,15.548861 -15.54886,15.548861 -8.58741,0 -15.5488598,-8.21905 -15.5488598,-15.548861 0,-7.32981 6.9614498,-15.548876 15.5488598,-15.548876 8.58741,0 15.54886,6.96147 15.54886,15.548876 z"
id="path832"
inkscape:connector-curvature="0" />
<path
id="path830"
d="m 208.48425,89.536074 c 0,8.587406 -6.96145,15.548876 -15.54886,15.548876 -8.58741,0 -15.54886,-8.219065 -15.54886,-15.548876 0,-7.32981 6.96145,-15.548876 15.54886,-15.548876 8.58741,0 15.54886,6.96147 15.54886,15.548876 z"
style="opacity:1;fill:#ffffff;stroke:none;stroke-width:27.98797607"
inkscape:connector-curvature="0" />
<path
d="m 110.95666,170.57254 v 200.3394 H -29.455833 v -200.3394 z"
id="path21"
inkscape:connector-curvature="0"
style="fill:#e1e6e9;stroke-width:2.24198127" />
<path
d="m 251.36915,170.57254 v 200.3394 H 110.95666 v -200.3394 z"
id="path23"
inkscape:connector-curvature="0"
style="fill:#d5d6db;stroke-width:2.24198127" />
<path
d="m 143.21292,252.2132 h 70.31281 v 50.35817 h -70.31281 z"
id="path25"
inkscape:connector-curvature="0"
style="fill:#64798a;stroke-width:2.52059889" />
<path
d="M 8.6063356,252.23667 H 78.919141 v 50.35817 H 8.6063356 Z"
id="path27"
inkscape:connector-curvature="0"
style="fill:#64798a;stroke-width:2.52059889" />
<path
transform="translate(-147,-70)"
d="m 117.54492,240.57227 v 43.5957 l 156.74414,156.74414 h 55.92969 l 68.15039,-68.15039 V 240.57227 H 257.95703 Z"
id="path29"
style="fill:url(#linearGradient5356)"
inkscape:connector-curvature="0" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 5.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

View file

@ -0,0 +1,127 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="108"
height="108"
version="1.1"
viewBox="-147 -70 108 108"
id="svg33"
sodipodi:docname="favicon.svg"
inkscape:export-filename="/home/depau/AndroidStudioProjects/EtchDroid/docs/assets/favicons/mstile-144x144.png"
inkscape:export-xdpi="128"
inkscape:export-ydpi="128"
inkscape:version="0.92.2 2405546, 2018-03-11">
<sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="2560"
inkscape:window-height="1311"
id="namedview19"
showgrid="false"
inkscape:zoom="3.1446405"
inkscape:cx="12.355385"
inkscape:cy="61.362916"
inkscape:window-x="0"
inkscape:window-y="55"
inkscape:window-maximized="1"
inkscape:current-layer="svg33" />
<metadata
id="metadata37">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<defs
id="defs7">
<linearGradient
id="linearGradient5356"
x1="-173.9859"
x2="20.193203"
y1="252.52081"
y2="252.52081"
gradientTransform="matrix(0.78544799,0.78544799,-0.78544799,0.78544799,563.38515,24.524301)"
gradientUnits="userSpaceOnUse">
<stop
stop-opacity=".169"
offset="0"
id="stop2" />
<stop
stop-opacity="0"
offset="1"
id="stop4" />
</linearGradient>
</defs>
<g
transform="matrix(0.25900161,0,0,0.25900161,-121.23142,-59.354881)"
id="g31">
<path
id="path9"
d="m 224.44066,-35.008122 0.85797,0.475584 c 2.55974,1.418887 3.47819,4.621907 2.05931,7.181647 L 148.21329,115.42984 c -1.41889,2.55974 -4.62191,3.47819 -7.18165,2.0593 l -0.85797,-0.47558 c -2.55974,-1.41889 -3.47819,-4.6219 -2.0593,-7.18164 l 79.14465,-142.780733 c 1.41889,-2.55974 4.6219,-3.478196 7.18164,-2.059309 z"
style="fill:#a4c639;stroke-width:0"
inkscape:connector-curvature="0" />
<path
id="path11"
d="m -13.212145,-35.460534 -0.857974,0.475583 c -2.559741,1.418887 -3.47819,4.621899 -2.059302,7.18164 L 63.01523,114.97742 c 1.418888,2.55974 4.621902,3.4782 7.181643,2.05931 l 0.857974,-0.47558 c 2.559741,-1.41889 3.478186,-4.62191 2.059299,-7.18165 L -6.0305053,-33.401231 c -1.4188879,-2.559742 -4.6218987,-3.47819 -7.1816397,-2.059303 z"
style="fill:#a4c639;stroke-width:0"
inkscape:connector-curvature="0" />
<path
id="path13"
d="M 108.99219,3.591797 A 182.06224,168.05745 0 0 0 -73.013672,170.60938 H 291.01562 A 182.06224,168.05745 0 0 0 108.99219,3.591797 Z"
style="fill:#a4c639;stroke-width:2.00068402"
inkscape:connector-curvature="0" />
<path
style="opacity:1;fill:#ffffff;stroke:none;stroke-width:27.98797607"
d="m 40.483015,89.601019 c 0,8.587406 -6.96145,15.548861 -15.54886,15.548861 -8.58741,0 -15.5488598,-8.21905 -15.5488598,-15.548861 0,-7.32981 6.9614498,-15.548876 15.5488598,-15.548876 8.58741,0 15.54886,6.96147 15.54886,15.548876 z"
id="path832"
inkscape:connector-curvature="0" />
<path
id="path830"
d="m 208.48425,89.536074 c 0,8.587406 -6.96145,15.548876 -15.54886,15.548876 -8.58741,0 -15.54886,-8.219065 -15.54886,-15.548876 0,-7.32981 6.96145,-15.548876 15.54886,-15.548876 8.58741,0 15.54886,6.96147 15.54886,15.548876 z"
style="opacity:1;fill:#ffffff;stroke:none;stroke-width:27.98797607"
inkscape:connector-curvature="0" />
<path
d="m 110.95666,170.57254 v 200.3394 H -29.455833 v -200.3394 z"
id="path21"
inkscape:connector-curvature="0"
style="fill:#e1e6e9;stroke-width:2.24198127" />
<path
d="m 251.36915,170.57254 v 200.3394 H 110.95666 v -200.3394 z"
id="path23"
inkscape:connector-curvature="0"
style="fill:#d5d6db;stroke-width:2.24198127" />
<path
d="m 143.21292,252.2132 h 70.31281 v 50.35817 h -70.31281 z"
id="path25"
inkscape:connector-curvature="0"
style="fill:#64798a;stroke-width:2.52059889" />
<path
d="M 8.6063356,252.23667 H 78.919141 v 50.35817 H 8.6063356 Z"
id="path27"
inkscape:connector-curvature="0"
style="fill:#64798a;stroke-width:2.52059889" />
<path
transform="translate(-147,-70)"
d="m 117.54492,240.57227 v 43.5957 l 156.74414,156.74414 h 55.92969 l 68.15039,-68.15039 V 240.57227 H 257.95703 Z"
id="path29"
style="fill:url(#linearGradient5356)"
inkscape:connector-curvature="0" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 5.1 KiB

View file

@ -0,0 +1,20 @@
---
layout: null
---
{
"name": "EtchDroid",
"icons": [
{
"src": "{{ "/assets/favicons/android-chrome-192x192.png?v=2" | prepend: site.baseurl | replace: '//', '/' | prepend: site.url }}",
"sizes": "192x192",
"type": "image/png"
},
{
"src": "{{ "/assets/favicons/android-chrome-384x384.png?v=2" | prepend: site.baseurl | replace: '//', '/' | prepend: site.url }}",
"sizes": "384x384",
"type": "image/png"
}
],
"theme_color": "#2D643E",
"background_color": "#2D643E"
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

View file

@ -0,0 +1,127 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="108"
height="108"
version="1.1"
viewBox="-147 -70 108 108"
id="svg33"
sodipodi:docname="favicon.svg"
inkscape:export-filename="/home/depau/AndroidStudioProjects/EtchDroid/docs/assets/favicons/mstile-144x144.png"
inkscape:export-xdpi="128"
inkscape:export-ydpi="128"
inkscape:version="0.92.2 2405546, 2018-03-11">
<sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="2560"
inkscape:window-height="1311"
id="namedview19"
showgrid="false"
inkscape:zoom="3.1446405"
inkscape:cx="12.355385"
inkscape:cy="61.362916"
inkscape:window-x="0"
inkscape:window-y="55"
inkscape:window-maximized="1"
inkscape:current-layer="svg33" />
<metadata
id="metadata37">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<defs
id="defs7">
<linearGradient
id="linearGradient5356"
x1="-173.9859"
x2="20.193203"
y1="252.52081"
y2="252.52081"
gradientTransform="matrix(0.78544799,0.78544799,-0.78544799,0.78544799,563.38515,24.524301)"
gradientUnits="userSpaceOnUse">
<stop
stop-opacity=".169"
offset="0"
id="stop2" />
<stop
stop-opacity="0"
offset="1"
id="stop4" />
</linearGradient>
</defs>
<g
transform="matrix(0.25900161,0,0,0.25900161,-121.23142,-59.354881)"
id="g31">
<path
id="path9"
d="m 224.44066,-35.008122 0.85797,0.475584 c 2.55974,1.418887 3.47819,4.621907 2.05931,7.181647 L 148.21329,115.42984 c -1.41889,2.55974 -4.62191,3.47819 -7.18165,2.0593 l -0.85797,-0.47558 c -2.55974,-1.41889 -3.47819,-4.6219 -2.0593,-7.18164 l 79.14465,-142.780733 c 1.41889,-2.55974 4.6219,-3.478196 7.18164,-2.059309 z"
style="fill:#a4c639;stroke-width:0"
inkscape:connector-curvature="0" />
<path
id="path11"
d="m -13.212145,-35.460534 -0.857974,0.475583 c -2.559741,1.418887 -3.47819,4.621899 -2.059302,7.18164 L 63.01523,114.97742 c 1.418888,2.55974 4.621902,3.4782 7.181643,2.05931 l 0.857974,-0.47558 c 2.559741,-1.41889 3.478186,-4.62191 2.059299,-7.18165 L -6.0305053,-33.401231 c -1.4188879,-2.559742 -4.6218987,-3.47819 -7.1816397,-2.059303 z"
style="fill:#a4c639;stroke-width:0"
inkscape:connector-curvature="0" />
<path
id="path13"
d="M 108.99219,3.591797 A 182.06224,168.05745 0 0 0 -73.013672,170.60938 H 291.01562 A 182.06224,168.05745 0 0 0 108.99219,3.591797 Z"
style="fill:#a4c639;stroke-width:2.00068402"
inkscape:connector-curvature="0" />
<path
style="opacity:1;fill:#ffffff;stroke:none;stroke-width:27.98797607"
d="m 40.483015,89.601019 c 0,8.587406 -6.96145,15.548861 -15.54886,15.548861 -8.58741,0 -15.5488598,-8.21905 -15.5488598,-15.548861 0,-7.32981 6.9614498,-15.548876 15.5488598,-15.548876 8.58741,0 15.54886,6.96147 15.54886,15.548876 z"
id="path832"
inkscape:connector-curvature="0" />
<path
id="path830"
d="m 208.48425,89.536074 c 0,8.587406 -6.96145,15.548876 -15.54886,15.548876 -8.58741,0 -15.54886,-8.219065 -15.54886,-15.548876 0,-7.32981 6.96145,-15.548876 15.54886,-15.548876 8.58741,0 15.54886,6.96147 15.54886,15.548876 z"
style="opacity:1;fill:#ffffff;stroke:none;stroke-width:27.98797607"
inkscape:connector-curvature="0" />
<path
d="m 110.95666,170.57254 v 200.3394 H -29.455833 v -200.3394 z"
id="path21"
inkscape:connector-curvature="0"
style="fill:#e1e6e9;stroke-width:2.24198127" />
<path
d="m 251.36915,170.57254 v 200.3394 H 110.95666 v -200.3394 z"
id="path23"
inkscape:connector-curvature="0"
style="fill:#d5d6db;stroke-width:2.24198127" />
<path
d="m 143.21292,252.2132 h 70.31281 v 50.35817 h -70.31281 z"
id="path25"
inkscape:connector-curvature="0"
style="fill:#64798a;stroke-width:2.52059889" />
<path
d="M 8.6063356,252.23667 H 78.919141 v 50.35817 H 8.6063356 Z"
id="path27"
inkscape:connector-curvature="0"
style="fill:#64798a;stroke-width:2.52059889" />
<path
transform="translate(-147,-70)"
d="m 117.54492,240.57227 v 43.5957 l 156.74414,156.74414 h 55.92969 l 68.15039,-68.15039 V 240.57227 H 257.95703 Z"
id="path29"
style="fill:url(#linearGradient5356)"
inkscape:connector-curvature="0" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 5.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 39 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 427 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 45 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 58 KiB

View file

Before

Width:  |  Height:  |  Size: 11 KiB

After

Width:  |  Height:  |  Size: 11 KiB

View file

Before

Width:  |  Height:  |  Size: 18 KiB

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

View file

Before

Width:  |  Height:  |  Size: 17 KiB

After

Width:  |  Height:  |  Size: 17 KiB

View file

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 12 KiB

View file

Before

Width:  |  Height:  |  Size: 14 KiB

After

Width:  |  Height:  |  Size: 14 KiB

BIN
docs/assets/img/icon.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

View file

Before

Width:  |  Height:  |  Size: 11 KiB

After

Width:  |  Height:  |  Size: 11 KiB

View file

Before

Width:  |  Height:  |  Size: 5.4 KiB

After

Width:  |  Height:  |  Size: 5.4 KiB

3
docs/assets/js/main.js Normal file
View file

@ -0,0 +1,3 @@
function random_number(first, last) {
return Math.floor((Math.random() * (last - first + 1))) + first;
}

79
docs/broken_usb.md Normal file
View file

@ -0,0 +1,79 @@
---
title: My USB drive is broken! Plz helppppp :(
permalink: /broken_usb/
layout: page
---
![Unsupported USB drive](/assets/img/broken_usb_1.png){:width="49%"} ![Issues with USB drive](/assets/img/broken_usb_2.png){:width="49%"}
If you just flashed your USB drive and you see one of the notifications above, your USB drive **IS NOT BROKEN**.
There is litterally **no way** EtchDroid can break your USB drive.
# What does that message actually mean
Most images you'll want to flash with EtchDroid will have a somewhat *weird* format. For example, take an Ubuntu image: that image is specifically made to boot both from a USB drive and a DVD.
This means that the resulting USB drive's file system will be marked as read-only.
Android complains about it because it expects a writable file system. Not finding any, one of these errors will show up telling you how to format it.
Simply unplug the USB drive and plug it into a computer. If the image you provided is valid and EtchDroid was able to write it, it should work just fine.
# How to format the USB drive
Once you're done with the image you've written you may want to format it with a regular file system. This will allow you to use the USB drive to store regular files once again.
## On Android
1. Close EtchDroid, plug your USB drive.
1. Tap the "Unsupported USB Drive" or "Issues with USB drive" notification.
If it does not show up:
1. Open Settings
1. Find "Storage"
1. Tap the name of the USB drive
1. If the file explorer opens, tap the menu button, "Storage settings", "Format"
1. Tap "Format USB drive"
Remember to eject the USB drive from settings before unplugging it.
![Format USB drive (Android)](/assets/img/format_android.png){:width="300px"}
## On Ubuntu
This should work for regular Ubuntu with GNOME or Unity and with other GNU/Linux distributions with GNOME. If you have a different desktop environment, please refer to your distribution's documentation.
1. Open the Activities dashboard
1. Type "disk" and open "Disks" or "Disk Utility"
1. Select your USB drive from the left sidebar
1. From the overflow menu on the upper right, select "Format Disk..."
1. Use default settings, then confirm
1. Under "Volumes", select "Free space", then click the "+" button
1. Use maximum size, then go to the next page
1. Enter a name for your USB drive, under type select "For use with all systems and device"
1. Click "Create" and confirm
![Format USB drive (Ubuntu)](/assets/img/format_linux.png){:width="100%"}
## On macOS
**Note:** I don't use macOS so instructions below may not be accurate.
1. Open the Disk utility
1. Select your USB drive
1. There should be an "Erase drive" button somewhere
1. You should find an option to format it with a "FAT" file system
### or
You can use "SD Memory Formatter" (even though you're not using an SD card, it will work on a USB drive too):
https://www.sdcard.org/downloads/formatter_4/
## On Windows
Use "SD Memory Formatter" (even though you're not using an SD card, it will work on a USB drive too):
https://www.sdcard.org/downloads/formatter_4/
![Format USB drive (Windows)](https://www.pendrivelinux.com/wp-content/uploads/SD-Formatter1.png)

37
docs/donate.md Normal file
View file

@ -0,0 +1,37 @@
---
title: Donate
permalink: /donate/
layout: page
---
# Subscriptions
You can actively support the development with a monthly subscription on Patreon or Flattr.
<p align="center">
<a href="https://www.patreon.com/depau" rel="_noopener" target="_blank"><img alt="Become a Patron" src="/assets/img/become_a_patron_button.png"/></a> &nbsp;&nbsp;&nbsp; <a href="https://flattr.com/@Depau" rel="_noopener" target="_blank"><img alt="Flattr this" src="https://api.flattr.com/button/flattr-badge-large.png"/></a>
</p>
Supporters who subscribe for $10 or more can ask me to **get listed in the app's
about page** and in the GitHub README.md.
# One-time
You can buy me a coffee on PayPal or Monero.
### PayPal
[https://paypal.me/DavideDepau](https://paypal.me/DavideDepau)
### Monero
![82WTvrLEdTbULrcgcUnpuzevHaTMURHQfi4Sf5dG3WLjXzP8NwrfTL82HNdV8gnSN183TnLLsR5Q2YWcNJRriHvPPoweT1Q](https://i.imgur.com/8wxtv31.png)
# Bug bounties
Want a new feature or an annoying bug fixed? Post a bounty on it!
Whoever first closes the issue will get the bounty. [See the issues](https://github.com/Depau/EtchDroid/issues).
To post a bounty, simply click the "Post a bounty" link under the issue description.
If you just created the issue and the link doesn't show up, wait a few minutes so the bounty bot can detect it.

9
docs/download.md Normal file
View file

@ -0,0 +1,9 @@
---
layout: page
permalink: /download/
title: Download
---
## EtchDroid can be downloaded from
[![F-Droid](/assets/img/get-from-fdroid-small.png)](https://f-droid.org/packages/eu.depau.etchdroid/) [![Google Play](/assets/img/get-from-googleplay-small.png)](https://play.google.com/store/apps/details?id=eu.depau.etchdroid) [![GitHub](/assets/img/get-from-github-small.png)](https://github.com/Depau/EtchDroid/releases)

View file

@ -1,4 +1,12 @@
# EtchDroid FAQ
---
title: FAQ
permalink: /faq/
layout: page
---
### My USB drive is broken, please help!
It's not. Calm down and read this: [My USB drive is broken! Plz helppppp :(](/broken_usb/)
### When I tap "Write DMG image", an empty file picker is shown

30
docs/feed.xml Normal file
View file

@ -0,0 +1,30 @@
---
layout: null
---
<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
<title>{{ site.title | xml_escape }}</title>
<description>{{ site.description | xml_escape }}</description>
<link>{{ site.url }}{{ site.baseurl }}/</link>
<atom:link href="{{ "/feed.xml" | prepend: site.baseurl | prepend: site.url }}" rel="self" type="application/rss+xml"/>
<pubDate>{{ site.time | date_to_rfc822 }}</pubDate>
<lastBuildDate>{{ site.time | date_to_rfc822 }}</lastBuildDate>
<generator>Jekyll v{{ jekyll.version }}</generator>
{% for post in site.posts limit:10 %}
<item>
<title>{{ post.title | xml_escape }}</title>
<description>{{ post.content | xml_escape }}</description>
<pubDate>{{ post.date | date_to_rfc822 }}</pubDate>
<link>{{ post.url | prepend: site.baseurl | prepend: site.url }}</link>
<guid isPermaLink="true">{{ post.url | prepend: site.baseurl | prepend: site.url }}</guid>
{% for tag in post.tags %}
<category>{{ tag | xml_escape }}</category>
{% endfor %}
{% for cat in post.categories %}
<category>{{ cat | xml_escape }}</category>
{% endfor %}
</item>
{% endfor %}
</channel>
</rss>

View file

@ -1,6 +1,8 @@
# EtchDroid
![EtchDroid](img/playstore_banner.png)
---
layout: page
permalink: /
title: EtchDroid
---
EtchDroid is an open-source application that helps you write images to USB drives, no root required.
@ -19,15 +21,4 @@ You can use it to make a bootable GNU/Linux USB drive when your laptop is dead a
## Screenshots
[![screenshot0.png](https://s22.postimg.cc/pzx4pygy5/image.png)](https://postimg.cc/image/pzx4pygy5/) [![screenshot1.png](https://s22.postimg.cc/o845v25b1/image.png)](https://postimg.cc/image/o845v25b1/) [![screenshot2.png](https://s22.postimg.cc/cj0673m25/image.png)](https://postimg.cc/image/cj0673m25/) [![screenshot3.png](https://s22.postimg.cc/c68s0xbi5/image.png)](https://postimg.cc/image/c68s0xbi5/) [![screenshot4.png](https://s22.postimg.cc/77l9men4t/image.png)](https://postimg.cc/image/77l9men4t/) [![screenshot5.png](https://s22.postimg.cc/3nzbwlcp9/image.png)](https://postimg.cc/image/3nzbwlcp9/)
## Support the project
You can support the development by sending a donation.
- PayPal: [https://paypal.me/DavideDepau](https://paypal.me/DavideDepau)
- Monero: `82WTvrLEdTbULrcgcUnpuzevHaTMURHQfi4Sf5dG3WLjXzP8NwrfTL82HNdV8gnSN183TnLLsR5Q2YWcNJRriHvPPoweT1Q`
## FAQ/Common issues
[Link](https://etchdroid.depau.eu/faq)
[![screenshot0.png](https://s22.postimg.cc/pzx4pygy5/image.png)](https://postimg.cc/image/pzx4pygy5/) [![screenshot1.png](https://s22.postimg.cc/o845v25b1/image.png)](https://postimg.cc/image/o845v25b1/) [![screenshot2.png](https://s22.postimg.cc/cj0673m25/image.png)](https://postimg.cc/image/cj0673m25/) [![screenshot3.png](https://s22.postimg.cc/c68s0xbi5/image.png)](https://postimg.cc/image/c68s0xbi5/) [![screenshot4.png](https://s22.postimg.cc/77l9men4t/image.png)](https://postimg.cc/image/77l9men4t/) [![screenshot5.png](https://s22.postimg.cc/3nzbwlcp9/image.png)](https://postimg.cc/image/3nzbwlcp9/)

View file

@ -0,0 +1,15 @@
root = true
[*]
insert_final_newline = true
[*.js]
indent_style = space
indent_size = 2
[*.json]
indent_style = space
indent_size = 2
[*.less]
indent_style = space
indent_size = 2
[*.sass]
indent_style = space
indent_size = 2

View file

@ -0,0 +1,22 @@
# https://git-scm.com/docs/gitignore
# https://help.github.com/articles/ignoring-files
# Example .gitignore files: https://github.com/github/gitignore
# Jekyll metadata
_gh_pages
_site
docs/.jekyll-metadata
docs/dist
*.log
.sass-cache
Thumbs.db
.DS_Store
/node_modules/
.grunt/
/bower_components/
.build*
/_SpecRunner.html
Gemfile.lock
dist/sassc

View file

@ -0,0 +1,17 @@
demo\
fonts\
scripts\
test\
.editorconfig
.gitignore
.jshintrc
.npmignore
.travis.yml
.versions
bootstrap-elements.html
bower.json
CONTRIBUTING.md
Gruntfile.js
index.html
package.js

View file

@ -0,0 +1 @@
bootstrap-material-design

View file

@ -0,0 +1 @@
2.2.2

View file

@ -0,0 +1,22 @@
language: node_js
node_js: 0.10.33
sudo: false # use new container infrastructure
# sass setup
cache: bundler # speeds up bundler
rvm:
- 2.2.2
before_script:
- npm install -g grunt-cli
- npm install -g bower
#- export DISPLAY=:99.0
#- sh -e /etc/init.d/xvfb start
# Install meteor
#- curl https://install.meteor.com | /bin/sh
# Install spacejam, Meteor's CI helper
#- npm install -g spacejam
script: bower install && bundle install && grunt

File diff suppressed because it is too large Load diff

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -0,0 +1,47 @@
.withripple {
position: relative;
}
.ripple-container {
position: absolute;
top: 0;
left: 0;
z-index: 1;
width: 100%;
height: 100%;
overflow: hidden;
border-radius: inherit;
pointer-events: none;
}
.ripple {
position: absolute;
width: 20px;
height: 20px;
margin-left: -10px;
margin-top: -10px;
border-radius: 100%;
background-color: #000;
background-color: rgba(0, 0, 0, 0.05);
-webkit-transform: scale(1);
-ms-transform: scale(1);
-o-transform: scale(1);
transform: scale(1);
-webkit-transform-origin: 50%;
-ms-transform-origin: 50%;
-o-transform-origin: 50%;
transform-origin: 50%;
opacity: 0;
pointer-events: none;
}
.ripple.ripple-on {
-webkit-transition: opacity 0.15s ease-in 0s, -webkit-transform 0.5s cubic-bezier(0.4, 0, 0.2, 1) 0.1s;
-o-transition: opacity 0.15s ease-in 0s, -o-transform 0.5s cubic-bezier(0.4, 0, 0.2, 1) 0.1s;
transition: opacity 0.15s ease-in 0s, transform 0.5s cubic-bezier(0.4, 0, 0.2, 1) 0.1s;
opacity: 0.1;
}
.ripple.ripple-out {
-webkit-transition: opacity 0.1s linear 0s !important;
-o-transition: opacity 0.1s linear 0s !important;
transition: opacity 0.1s linear 0s !important;
opacity: 0;
}
/*# sourceMappingURL=ripples.css.map */

View file

@ -0,0 +1 @@
{"version":3,"sources":["/less/ripples.less","ripples.css"],"names":[],"mappings":"AAAA;EACI,mBAAA;CCCH;ADCD;EACI,mBAAA;EACA,OAAA;EACA,QAAA;EACA,WAAA;EACA,YAAA;EACA,aAAA;EACA,iBAAA;EACA,uBAAA;EACA,qBAAA;CCCH;ADCD;EACI,mBAAA;EACA,YAAA;EACA,aAAA;EACA,mBAAA;EACA,kBAAA;EACA,oBAAA;EACA,uBAAA;EACA,sCAAA;EACA,4BAAA;MAAA,wBAAA;OAAA,uBAAA;UAAA,oBAAA;EACA,8BAAA;MAAA,0BAAA;OAAA,yBAAA;UAAA,sBAAA;EACA,WAAA;EACA,qBAAA;CCCH;ADCD;EACI,uGAAA;OAAA,6FAAA;UAAA,uFAAA;EACA,aAAA;CCCH;ADCD;EACI,sDAAA;OAAA,iDAAA;UAAA,8CAAA;EACA,WAAA;CCCH","file":"ripples.css","sourcesContent":[".withripple {\n position: relative;\n}\n.ripple-container {\n position: absolute;\n top: 0;\n left: 0;\n z-index: 1;\n width: 100%;\n height: 100%;\n overflow: hidden;\n border-radius: inherit;\n pointer-events: none;\n}\n.ripple {\n position: absolute;\n width: 20px;\n height: 20px;\n margin-left: -10px;\n margin-top: -10px;\n border-radius: 100%;\n background-color: #000; // fallback color\n background-color: rgba(0,0,0,0.05);\n transform: scale(1);\n transform-origin: 50%;\n opacity: 0;\n pointer-events: none;\n}\n.ripple.ripple-on {\n transition: opacity 0.15s ease-in 0s, transform 0.5s cubic-bezier(0.4, 0, 0.2, 1) 0.1s;\n opacity: 0.1;\n}\n.ripple.ripple-out {\n transition: opacity 0.1s linear 0s !important;\n opacity: 0;\n}\n",".withripple {\n position: relative;\n}\n.ripple-container {\n position: absolute;\n top: 0;\n left: 0;\n z-index: 1;\n width: 100%;\n height: 100%;\n overflow: hidden;\n border-radius: inherit;\n pointer-events: none;\n}\n.ripple {\n position: absolute;\n width: 20px;\n height: 20px;\n margin-left: -10px;\n margin-top: -10px;\n border-radius: 100%;\n background-color: #000;\n background-color: rgba(0, 0, 0, 0.05);\n transform: scale(1);\n transform-origin: 50%;\n opacity: 0;\n pointer-events: none;\n}\n.ripple.ripple-on {\n transition: opacity 0.15s ease-in 0s, transform 0.5s cubic-bezier(0.4, 0, 0.2, 1) 0.1s;\n opacity: 0.1;\n}\n.ripple.ripple-out {\n transition: opacity 0.1s linear 0s !important;\n opacity: 0;\n}\n/*# sourceMappingURL=ripples.css.map */"]}

View file

@ -0,0 +1,2 @@
.withripple{position:relative}.ripple-container{position:absolute;top:0;left:0;z-index:1;width:100%;height:100%;overflow:hidden;border-radius:inherit;pointer-events:none}.ripple{position:absolute;width:20px;height:20px;margin-left:-10px;margin-top:-10px;border-radius:100%;background-color:#000;background-color:rgba(0,0,0,.05);-webkit-transform:scale(1);-ms-transform:scale(1);-o-transform:scale(1);transform:scale(1);-webkit-transform-origin:50%;-ms-transform-origin:50%;-o-transform-origin:50%;transform-origin:50%;opacity:0;pointer-events:none}.ripple.ripple-on{-webkit-transition:opacity .15s ease-in 0s,-webkit-transform .5s cubic-bezier(.4,0,.2,1) .1s;-o-transition:opacity .15s ease-in 0s,-o-transform .5s cubic-bezier(.4,0,.2,1) .1s;transition:opacity .15s ease-in 0s,transform .5s cubic-bezier(.4,0,.2,1) .1s;opacity:.1}.ripple.ripple-out{-webkit-transition:opacity .1s linear 0s!important;-o-transition:opacity .1s linear 0s!important;transition:opacity .1s linear 0s!important;opacity:0}
/*# sourceMappingURL=ripples.min.css.map */

View file

@ -0,0 +1 @@
{"version":3,"sources":["less/ripples.less"],"names":[],"mappings":"AAAA,YACI,SAAA,SAEJ,kBACI,SAAA,SACA,IAAA,EACA,KAAA,EACA,QAAA,EACA,MAAA,KACA,OAAA,KACA,SAAA,OACA,cAAA,QACA,eAAA,KAEJ,QACI,SAAA,SACA,MAAA,KACA,OAAA,KACA,YAAA,MACA,WAAA,MACA,cAAA,KACA,iBAAA,KACA,iBAAA,gBACA,kBAAA,SAAA,cAAA,SAAA,aAAA,SAAA,UAAA,SACA,yBAAA,IAAA,qBAAA,IAAA,oBAAA,IAAA,iBAAA,IACA,QAAA,EACA,eAAA,KAEJ,kBACI,mBAAA,QAAA,KAAA,QAAA,GAAA,kBAAA,IAAA,wBAAA,IAAA,cAAA,QAAA,KAAA,QAAA,GAAA,aAAA,IAAA,wBAAA,IAAA,WAAA,QAAA,KAAA,QAAA,GAAA,UAAA,IAAA,wBAAA,IACA,QAAA,GAEJ,mBACI,mBAAA,QAAA,IAAA,OAAA,aAAA,cAAA,QAAA,IAAA,OAAA,aAAA,WAAA,QAAA,IAAA,OAAA,aACA,QAAA"}

View file

@ -0,0 +1,352 @@
/* globals jQuery */
(function ($) {
// Selector to select only not already processed elements
$.expr[":"].notmdproc = function (obj) {
if ($(obj).data("mdproc")) {
return false;
} else {
return true;
}
};
function _isChar(evt) {
if (typeof evt.which == "undefined") {
return true;
} else if (typeof evt.which == "number" && evt.which > 0) {
return (
!evt.ctrlKey
&& !evt.metaKey
&& !evt.altKey
&& evt.which != 8 // backspace
&& evt.which != 9 // tab
&& evt.which != 13 // enter
&& evt.which != 16 // shift
&& evt.which != 17 // ctrl
&& evt.which != 20 // caps lock
&& evt.which != 27 // escape
);
}
return false;
}
function _addFormGroupFocus(element) {
var $element = $(element);
if (!$element.prop('disabled')) { // this is showing as undefined on chrome but works fine on firefox??
$element.closest(".form-group").addClass("is-focused");
}
}
function _toggleDisabledState($element, state) {
var $target;
if ($element.hasClass('checkbox-inline') || $element.hasClass('radio-inline')) {
$target = $element;
} else {
$target = $element.closest('.checkbox').length ? $element.closest('.checkbox') : $element.closest('.radio');
}
return $target.toggleClass('disabled', state);
}
function _toggleTypeFocus($input) {
var disabledToggleType = false;
if ($input.is($.material.options.checkboxElements) || $input.is($.material.options.radioElements)) {
disabledToggleType = true;
}
$input.closest('label').hover(function () {
var $i = $(this).find('input');
var isDisabled = $i.prop('disabled'); // hack because the _addFormGroupFocus() wasn't identifying the property on chrome
if (disabledToggleType) {
_toggleDisabledState($(this), isDisabled);
}
if (!isDisabled) {
_addFormGroupFocus($i); // need to find the input so we can check disablement
}
},
function () {
_removeFormGroupFocus($(this).find('input'));
});
}
function _removeFormGroupFocus(element) {
$(element).closest(".form-group").removeClass("is-focused"); // remove class from form-group
}
$.material = {
"options": {
// These options set what will be started by $.material.init()
"validate": true,
"input": true,
"ripples": true,
"checkbox": true,
"togglebutton": true,
"radio": true,
"arrive": true,
"autofill": false,
"withRipples": [
".btn:not(.btn-link)",
".card-image",
".navbar a:not(.withoutripple)",
".dropdown-menu a",
".nav-tabs a:not(.withoutripple)",
".withripple",
".pagination li:not(.active):not(.disabled) a:not(.withoutripple)"
].join(","),
"inputElements": "input.form-control, textarea.form-control, select.form-control",
"checkboxElements": ".checkbox > label > input[type=checkbox], label.checkbox-inline > input[type=checkbox]",
"togglebuttonElements": ".togglebutton > label > input[type=checkbox]",
"radioElements": ".radio > label > input[type=radio], label.radio-inline > input[type=radio]"
},
"checkbox": function (selector) {
// Add fake-checkbox to material checkboxes
var $input = $((selector) ? selector : this.options.checkboxElements)
.filter(":notmdproc")
.data("mdproc", true)
.after("<span class='checkbox-material'><span class='check'></span></span>");
_toggleTypeFocus($input);
},
"togglebutton": function (selector) {
// Add fake-checkbox to material checkboxes
var $input = $((selector) ? selector : this.options.togglebuttonElements)
.filter(":notmdproc")
.data("mdproc", true)
.after("<span class='toggle'></span>");
_toggleTypeFocus($input);
},
"radio": function (selector) {
// Add fake-radio to material radios
var $input = $((selector) ? selector : this.options.radioElements)
.filter(":notmdproc")
.data("mdproc", true)
.after("<span class='circle'></span><span class='check'></span>");
_toggleTypeFocus($input);
},
"input": function (selector) {
$((selector) ? selector : this.options.inputElements)
.filter(":notmdproc")
.data("mdproc", true)
.each(function () {
var $input = $(this);
// Requires form-group standard markup (will add it if necessary)
var $formGroup = $input.closest(".form-group"); // note that form-group may be grandparent in the case of an input-group
if ($formGroup.length === 0 && $input.attr('type') !== "hidden" && !$input.attr('hidden')) {
$input.wrap("<div class='form-group'></div>");
$formGroup = $input.closest(".form-group"); // find node after attached (otherwise additional attachments don't work)
}
// Legacy - Add hint label if using the old shorthand data-hint attribute on the input
if ($input.attr("data-hint")) {
$input.after("<p class='help-block'>" + $input.attr("data-hint") + "</p>");
$input.removeAttr("data-hint");
}
// Legacy - Change input-sm/lg to form-group-sm/lg instead (preferred standard and simpler css/less variants)
var legacySizes = {
"input-lg": "form-group-lg",
"input-sm": "form-group-sm"
};
$.each(legacySizes, function (legacySize, standardSize) {
if ($input.hasClass(legacySize)) {
$input.removeClass(legacySize);
$formGroup.addClass(standardSize);
}
});
// Legacy - Add label-floating if using old shorthand <input class="floating-label" placeholder="foo">
if ($input.hasClass("floating-label")) {
var placeholder = $input.attr("placeholder");
$input.attr("placeholder", null).removeClass("floating-label");
var id = $input.attr("id");
var forAttribute = "";
if (id) {
forAttribute = "for='" + id + "'";
}
$formGroup.addClass("label-floating");
$input.after("<label " + forAttribute + "class='control-label'>" + placeholder + "</label>");
}
// Set as empty if is empty (damn I must improve this...)
if ($input.val() === null || $input.val() == "undefined" || $input.val() === "") {
$formGroup.addClass("is-empty");
}
// Support for file input
if ($formGroup.find("input[type=file]").length > 0) {
$formGroup.addClass("is-fileinput");
}
});
},
"attachInputEventHandlers": function () {
var validate = this.options.validate;
$(document)
.on("keydown paste", ".form-control", function (e) {
if (_isChar(e)) {
$(this).closest(".form-group").removeClass("is-empty");
}
})
.on("keyup change", ".form-control", function () {
var $input = $(this);
var $formGroup = $input.closest(".form-group");
var isValid = (typeof $input[0].checkValidity === "undefined" || $input[0].checkValidity());
if ($input.val() === "") {
$formGroup.addClass("is-empty");
}
else {
$formGroup.removeClass("is-empty");
}
// Validation events do not bubble, so they must be attached directly to the input: http://jsfiddle.net/PEpRM/1/
// Further, even the bind method is being caught, but since we are already calling #checkValidity here, just alter
// the form-group on change.
//
// NOTE: I'm not sure we should be intervening regarding validation, this seems better as a README and snippet of code.
// BUT, I've left it here for backwards compatibility.
if (validate) {
if (isValid) {
$formGroup.removeClass("has-error");
}
else {
$formGroup.addClass("has-error");
}
}
})
.on("focus", ".form-control, .form-group.is-fileinput", function () {
_addFormGroupFocus(this);
})
.on("blur", ".form-control, .form-group.is-fileinput", function () {
_removeFormGroupFocus(this);
})
// make sure empty is added back when there is a programmatic value change.
// NOTE: programmatic changing of value using $.val() must trigger the change event i.e. $.val('x').trigger('change')
.on("change", ".form-group input", function () {
var $input = $(this);
if ($input.attr("type") == "file") {
return;
}
var $formGroup = $input.closest(".form-group");
var value = $input.val();
if (value) {
$formGroup.removeClass("is-empty");
} else {
$formGroup.addClass("is-empty");
}
})
// set the fileinput readonly field with the name of the file
.on("change", ".form-group.is-fileinput input[type='file']", function () {
var $input = $(this);
var $formGroup = $input.closest(".form-group");
var value = "";
$.each(this.files, function (i, file) {
value += file.name + ", ";
});
value = value.substring(0, value.length - 2);
if (value) {
$formGroup.removeClass("is-empty");
} else {
$formGroup.addClass("is-empty");
}
$formGroup.find("input.form-control[readonly]").val(value);
});
},
"ripples": function (selector) {
$((selector) ? selector : this.options.withRipples).ripples();
},
"autofill": function () {
// This part of code will detect autofill when the page is loading (username and password inputs for example)
var loading = setInterval(function () {
$("input[type!=checkbox]").each(function () {
var $this = $(this);
if ($this.val() && $this.val() !== $this.attr("value")) {
$this.trigger("change");
}
});
}, 100);
// After 10 seconds we are quite sure all the needed inputs are autofilled then we can stop checking them
setTimeout(function () {
clearInterval(loading);
}, 10000);
},
"attachAutofillEventHandlers": function () {
// Listen on inputs of the focused form (because user can select from the autofill dropdown only when the input has focus)
var focused;
$(document)
.on("focus", "input", function () {
var $inputs = $(this).parents("form").find("input").not("[type=file]");
focused = setInterval(function () {
$inputs.each(function () {
var $this = $(this);
if ($this.val() !== $this.attr("value")) {
$this.trigger("change");
}
});
}, 100);
})
.on("blur", ".form-group input", function () {
clearInterval(focused);
});
},
"init": function (options) {
this.options = $.extend({}, this.options, options);
var $document = $(document);
if ($.fn.ripples && this.options.ripples) {
this.ripples();
}
if (this.options.input) {
this.input();
this.attachInputEventHandlers();
}
if (this.options.checkbox) {
this.checkbox();
}
if (this.options.togglebutton) {
this.togglebutton();
}
if (this.options.radio) {
this.radio();
}
if (this.options.autofill) {
this.autofill();
this.attachAutofillEventHandlers();
}
if (document.arrive && this.options.arrive) {
if ($.fn.ripples && this.options.ripples) {
$document.arrive(this.options.withRipples, function () {
$.material.ripples($(this));
});
}
if (this.options.input) {
$document.arrive(this.options.inputElements, function () {
$.material.input($(this));
});
}
if (this.options.checkbox) {
$document.arrive(this.options.checkboxElements, function () {
$.material.checkbox($(this));
});
}
if (this.options.radio) {
$document.arrive(this.options.radioElements, function () {
$.material.radio($(this));
});
}
if (this.options.togglebutton) {
$document.arrive(this.options.togglebuttonElements, function () {
$.material.togglebutton($(this));
});
}
}
}
};
})(jQuery);

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -0,0 +1,324 @@
/* Copyright 2014+, Federico Zivolo, LICENSE at https://github.com/FezVrasta/bootstrap-material-design/blob/master/LICENSE.md */
/* globals jQuery, navigator */
(function($, window, document, undefined) {
"use strict";
/**
* Define the name of the plugin
*/
var ripples = "ripples";
/**
* Get an instance of the plugin
*/
var self = null;
/**
* Define the defaults of the plugin
*/
var defaults = {};
/**
* Create the main plugin function
*/
function Ripples(element, options) {
self = this;
this.element = $(element);
this.options = $.extend({}, defaults, options);
this._defaults = defaults;
this._name = ripples;
this.init();
}
/**
* Initialize the plugin
*/
Ripples.prototype.init = function() {
var $element = this.element;
$element.on("mousedown touchstart", function(event) {
/**
* Verify if the user is just touching on a device and return if so
*/
if(self.isTouch() && event.type === "mousedown") {
return;
}
/**
* Verify if the current element already has a ripple wrapper element and
* creates if it doesn't
*/
if(!($element.find(".ripple-container").length)) {
$element.append("<div class=\"ripple-container\"></div>");
}
/**
* Find the ripple wrapper
*/
var $wrapper = $element.children(".ripple-container");
/**
* Get relY and relX positions
*/
var relY = self.getRelY($wrapper, event);
var relX = self.getRelX($wrapper, event);
/**
* If relY and/or relX are false, return the event
*/
if(!relY && !relX) {
return;
}
/**
* Get the ripple color
*/
var rippleColor = self.getRipplesColor($element);
/**
* Create the ripple element
*/
var $ripple = $("<div></div>");
$ripple
.addClass("ripple")
.css({
"left": relX,
"top": relY,
"background-color": rippleColor
});
/**
* Append the ripple to the wrapper
*/
$wrapper.append($ripple);
/**
* Make sure the ripple has the styles applied (ugly hack but it works)
*/
(function() { return window.getComputedStyle($ripple[0]).opacity; })();
/**
* Turn on the ripple animation
*/
self.rippleOn($element, $ripple);
/**
* Call the rippleEnd function when the transition "on" ends
*/
setTimeout(function() {
self.rippleEnd($ripple);
}, 500);
/**
* Detect when the user leaves the element
*/
$element.on("mouseup mouseleave touchend", function() {
$ripple.data("mousedown", "off");
if($ripple.data("animating") === "off") {
self.rippleOut($ripple);
}
});
});
};
/**
* Get the new size based on the element height/width and the ripple width
*/
Ripples.prototype.getNewSize = function($element, $ripple) {
return (Math.max($element.outerWidth(), $element.outerHeight()) / $ripple.outerWidth()) * 2.5;
};
/**
* Get the relX
*/
Ripples.prototype.getRelX = function($wrapper, event) {
var wrapperOffset = $wrapper.offset();
if(!self.isTouch()) {
/**
* Get the mouse position relative to the ripple wrapper
*/
return event.pageX - wrapperOffset.left;
} else {
/**
* Make sure the user is using only one finger and then get the touch
* position relative to the ripple wrapper
*/
event = event.originalEvent;
if(event.touches.length === 1) {
return event.touches[0].pageX - wrapperOffset.left;
}
return false;
}
};
/**
* Get the relY
*/
Ripples.prototype.getRelY = function($wrapper, event) {
var wrapperOffset = $wrapper.offset();
if(!self.isTouch()) {
/**
* Get the mouse position relative to the ripple wrapper
*/
return event.pageY - wrapperOffset.top;
} else {
/**
* Make sure the user is using only one finger and then get the touch
* position relative to the ripple wrapper
*/
event = event.originalEvent;
if(event.touches.length === 1) {
return event.touches[0].pageY - wrapperOffset.top;
}
return false;
}
};
/**
* Get the ripple color
*/
Ripples.prototype.getRipplesColor = function($element) {
var color = $element.data("ripple-color") ? $element.data("ripple-color") : window.getComputedStyle($element[0]).color;
return color;
};
/**
* Verify if the client browser has transistion support
*/
Ripples.prototype.hasTransitionSupport = function() {
var thisBody = document.body || document.documentElement;
var thisStyle = thisBody.style;
var support = (
thisStyle.transition !== undefined ||
thisStyle.WebkitTransition !== undefined ||
thisStyle.MozTransition !== undefined ||
thisStyle.MsTransition !== undefined ||
thisStyle.OTransition !== undefined
);
return support;
};
/**
* Verify if the client is using a mobile device
*/
Ripples.prototype.isTouch = function() {
return /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);
};
/**
* End the animation of the ripple
*/
Ripples.prototype.rippleEnd = function($ripple) {
$ripple.data("animating", "off");
if($ripple.data("mousedown") === "off") {
self.rippleOut($ripple);
}
};
/**
* Turn off the ripple effect
*/
Ripples.prototype.rippleOut = function($ripple) {
$ripple.off();
if(self.hasTransitionSupport()) {
$ripple.addClass("ripple-out");
} else {
$ripple.animate({"opacity": 0}, 100, function() {
$ripple.trigger("transitionend");
});
}
$ripple.on("transitionend webkitTransitionEnd oTransitionEnd MSTransitionEnd", function() {
$ripple.remove();
});
};
/**
* Turn on the ripple effect
*/
Ripples.prototype.rippleOn = function($element, $ripple) {
var size = self.getNewSize($element, $ripple);
if(self.hasTransitionSupport()) {
$ripple
.css({
"-ms-transform": "scale(" + size + ")",
"-moz-transform": "scale(" + size + ")",
"-webkit-transform": "scale(" + size + ")",
"transform": "scale(" + size + ")"
})
.addClass("ripple-on")
.data("animating", "on")
.data("mousedown", "on");
} else {
$ripple.animate({
"width": Math.max($element.outerWidth(), $element.outerHeight()) * 2,
"height": Math.max($element.outerWidth(), $element.outerHeight()) * 2,
"margin-left": Math.max($element.outerWidth(), $element.outerHeight()) * (-1),
"margin-top": Math.max($element.outerWidth(), $element.outerHeight()) * (-1),
"opacity": 0.2
}, 500, function() {
$ripple.trigger("transitionend");
});
}
};
/**
* Create the jquery plugin function
*/
$.fn.ripples = function(options) {
return this.each(function() {
if(!$.data(this, "plugin_" + ripples)) {
$.data(this, "plugin_" + ripples, new Ripples(this, options));
}
});
};
})(jQuery, window, document);

View file

@ -0,0 +1,2 @@
!function(a,b,c,d){"use strict";function e(b,c){g=this,this.element=a(b),this.options=a.extend({},h,c),this._defaults=h,this._name=f,this.init()}var f="ripples",g=null,h={};e.prototype.init=function(){var c=this.element;c.on("mousedown touchstart",function(d){if(!g.isTouch()||"mousedown"!==d.type){c.find(".ripple-container").length||c.append('<div class="ripple-container"></div>');var e=c.children(".ripple-container"),f=g.getRelY(e,d),h=g.getRelX(e,d);if(f||h){var i=g.getRipplesColor(c),j=a("<div></div>");j.addClass("ripple").css({left:h,top:f,"background-color":i}),e.append(j),function(){return b.getComputedStyle(j[0]).opacity}(),g.rippleOn(c,j),setTimeout(function(){g.rippleEnd(j)},500),c.on("mouseup mouseleave touchend",function(){j.data("mousedown","off"),"off"===j.data("animating")&&g.rippleOut(j)})}}})},e.prototype.getNewSize=function(a,b){return Math.max(a.outerWidth(),a.outerHeight())/b.outerWidth()*2.5},e.prototype.getRelX=function(a,b){var c=a.offset();return g.isTouch()?(b=b.originalEvent,1===b.touches.length?b.touches[0].pageX-c.left:!1):b.pageX-c.left},e.prototype.getRelY=function(a,b){var c=a.offset();return g.isTouch()?(b=b.originalEvent,1===b.touches.length?b.touches[0].pageY-c.top:!1):b.pageY-c.top},e.prototype.getRipplesColor=function(a){var c=a.data("ripple-color")?a.data("ripple-color"):b.getComputedStyle(a[0]).color;return c},e.prototype.hasTransitionSupport=function(){var a=c.body||c.documentElement,b=a.style,e=b.transition!==d||b.WebkitTransition!==d||b.MozTransition!==d||b.MsTransition!==d||b.OTransition!==d;return e},e.prototype.isTouch=function(){return/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent)},e.prototype.rippleEnd=function(a){a.data("animating","off"),"off"===a.data("mousedown")&&g.rippleOut(a)},e.prototype.rippleOut=function(a){a.off(),g.hasTransitionSupport()?a.addClass("ripple-out"):a.animate({opacity:0},100,function(){a.trigger("transitionend")}),a.on("transitionend webkitTransitionEnd oTransitionEnd MSTransitionEnd",function(){a.remove()})},e.prototype.rippleOn=function(a,b){var c=g.getNewSize(a,b);g.hasTransitionSupport()?b.css({"-ms-transform":"scale("+c+")","-moz-transform":"scale("+c+")","-webkit-transform":"scale("+c+")",transform:"scale("+c+")"}).addClass("ripple-on").data("animating","on").data("mousedown","on"):b.animate({width:2*Math.max(a.outerWidth(),a.outerHeight()),height:2*Math.max(a.outerWidth(),a.outerHeight()),"margin-left":-1*Math.max(a.outerWidth(),a.outerHeight()),"margin-top":-1*Math.max(a.outerWidth(),a.outerHeight()),opacity:.2},500,function(){b.trigger("transitionend")})},a.fn.ripples=function(b){return this.each(function(){a.data(this,"plugin_"+f)||a.data(this,"plugin_"+f,new e(this,b))})}}(jQuery,window,document);
//# sourceMappingURL=ripples.min.js.map

Some files were not shown because too many files have changed in this diff Show more