Add support for tags (#424)

Close #99
This commit is contained in:
Régis Freyd
2017-07-04 22:14:22 -04:00
committed by GitHub
parent 876c8bbecb
commit 23384db2c2
59 changed files with 2209 additions and 680 deletions
+12
View File
@@ -4,7 +4,19 @@ UNRELEASED CHANGES:
RELEASED VERSIONS:
v0.3.0 - 2017-07-04
-------------------
New features:
* Add supprort for organizing people into tags (equires `bower update` for dev environment).
* Add ability to filter contacts per tags on the contact list.
Improvements:
* Fix import translation key on the import reports.
* Settings' sidebar now has better icons.
v0.2.1 - 2017-07-02
-------------------
Improvements:
* Update the design of the latest actions on the dashboard.
+10
View File
@@ -199,6 +199,16 @@ class Account extends Model
return $this->hasMany(ImportJobReport::class);
}
/**
* Get the tags records associated with the contact.
*
* @return HasMany
*/
public function tags()
{
return $this->hasMany('App\Tag')->orderBy('name', 'asc');
}
/**
* Check if the account can be downgraded, based on a set of rules
*
@@ -58,6 +58,7 @@ class CalculateStatistics extends Command
}
$statistic->number_of_accounts_with_more_than_one_user = $number_of_accounts_with_more_than_one_user;
$statistic->number_of_import_jobs = DB::table('import_jobs')->count();
$statistic->number_of_tags = DB::table('tags')->count();
$statistic->save();
}
}
+25 -1
View File
@@ -5,11 +5,11 @@ namespace App;
use Auth;
use Carbon\Carbon;
use App\Helpers\DateHelper;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
use Illuminate\Database\Eloquent\Relations\HasMany;
use Illuminate\Support\Collection;
use Illuminate\Support\Facades\Storage;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\Model;
class Contact extends Model
@@ -162,6 +162,16 @@ class Contact extends Model
return $this->hasMany('App\Task');
}
/**
* Get the tags records associated with the contact.
*
* @return HasMany
*/
public function tags()
{
return $this->belongsToMany('App\Tag')->withPivot('account_id')->withTimestamps();
}
/**
* Sort the contacts according a given criteria
* @param Builder $builder
@@ -916,4 +926,18 @@ class Contact extends Model
return $this->debts;
}
/**
* Get the list of tags as a string to populate the tags form
*/
public function getTagsAsString()
{
$tags = array();
foreach ($this->tags as $tag) {
array_push($tags, $tag->name);
}
return implode(',', $tags);
}
}
@@ -0,0 +1,63 @@
<?php
namespace App\Http\Controllers\People;
use App\Contact;
use App\Tag;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use App\Http\Requests\People\TagsRequest;
class TagsController extends Controller
{
/**
* Update the specified resource in storage.
*
* @param GiftsRequest $request
* @param Contact $contact
* @param Gift $gift
* @return \Illuminate\Http\Response
*/
public function update(TagsRequest $request, Contact $contact)
{
if (auth()->user()->account_id != $contact->account_id) {
return response()->json(array('status' => 'no'));
}
$tags = explode(',', $request->input('tags'));
// if we receive an empty string, that means all tags have been removed.
if ($request->input('tags') == '') {
$contact->tags()->detach();
return response()->json(array('status' => 'no', 'tags' => ''));
}
$tagsIDs = array();
$tagsWithIdAndSlug = array();
foreach ($tags as $tag) {
$tag = auth()->user()->account->tags()->firstOrCreate([
'name' => $tag
]);
$tag->name_slug = str_slug($tag->name);
$tag->save();
$tagsIDs[$tag->id] = ['account_id' => auth()->user()->account_id];
// this is passed back in json to JS
array_push($tagsWithIdAndSlug, [
'id' => $tag->id,
'slug' => $tag->name_slug
]);
}
$contact->tags()->sync($tagsIDs);
$response = array(
'status' => 'yes',
'tags' => $tagsWithIdAndSlug,
);
return response()->json($response);
}
}
+18 -2
View File
@@ -4,6 +4,7 @@ namespace App\Http\Controllers;
use Auth;
use App\Note;
use App\Tag;
use Validator;
use App\Contact;
use App\Reminder;
@@ -29,10 +30,25 @@ class PeopleController extends Controller
$user->updateContactViewPreference($sort);
}
$contacts = $user->account->contacts()->sortedBy($sort)->get();
$tag = null;
if ($request->get('tags')) {
$tag = Tag::where('name_slug', $request->get('tags'))->first();
if (is_null($tag)) {
return redirect()->route('people.index');
}
$contacts = $user->account->contacts()->whereHas('tags', function ($query) use ($tag) {
$query->where('id', $tag->id);
})->sortedBy($sort)->get();
} else {
$contacts = $user->account->contacts()->sortedBy($sort)->get();
}
return view('people.index')
->withContacts($contacts);
->withContacts($contacts)
->withTag($tag);
}
/**
@@ -7,6 +7,7 @@ use App\User;
use Carbon\Carbon;
use App\Invitation;
use App\ImportJob;
use App\Tag;
use Illuminate\Http\Request;
use App\Helpers\RandomHelper;
use App\Jobs\SendNewUserAlert;
@@ -367,4 +368,28 @@ class SettingsController extends Controller
return redirect('/settings/users')
->with('success', trans('settings.users_list_delete_success'));
}
/**
* Display the list of tags for this account
*/
public function tags()
{
return view('settings.tags');
}
public function deleteTag(Request $request, $tagId)
{
$tag = Tag::findOrFail($tagId);
if ($tag->account_id != auth()->user()->account_id) {
return redirect('/');
}
$tag->contacts()->detach();
$tag->delete();
return redirect('/settings/tags')
->with('success', trans('settings.tags_list_delete_success'));
}
}
+29
View File
@@ -0,0 +1,29 @@
<?php
namespace App\Http\Requests\People;
use Illuminate\Foundation\Http\FormRequest;
class TagsRequest extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
*
* @return bool
*/
public function authorize()
{
return true;
}
/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules()
{
return [
];
}
}
+7
View File
@@ -35,6 +35,9 @@ Route::group(['middleware' => 'auth'], function () {
Route::get('/people/{contact}/work/edit', ['as' => '.edit', 'uses' => 'PeopleController@editWork'])->name('.work.edit');
Route::post('/people/{contact}/work/update', 'PeopleController@updateWork')->name('.work.update');
// Tags
Route::post('/people/{contact}/tags/update', 'People\\TagsController@update')->name('.tags.update');
// Notes
Route::get('/people/{contact}/notes/add', 'People\\NotesController@create')->name('.notes.add');
Route::post('/people/{contact}/notes/store', 'People\\NotesController@store')->name('.notes.store');
@@ -126,5 +129,9 @@ Route::group(['middleware' => 'auth'], function () {
Route::get('/settings/subscriptions/downgrade', 'Settings\\SubscriptionsController@downgrade')->name('.subscriptions.downgrade');
Route::post('/settings/subscriptions/downgrade', 'Settings\\SubscriptionsController@processDowngrade');
Route::get('/settings/tags', 'SettingsController@tags')->name('.tags');
Route::get('/settings/tags/add', 'SettingsController@addUser')->name('.tags.add');
Route::get('/settings/tags/{user}/delete', ['as' => '.tags.delete', 'uses' => 'SettingsController@deleteTag']);
});
});
+32
View File
@@ -0,0 +1,32 @@
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Builder;
class Tag extends Model
{
/**
* The attributes that aren't mass assignable.
*
* @var array
*/
protected $guarded = ['id'];
/**
* Get the account record associated with the debt.
*/
public function account()
{
return $this->belongsTo('App\Account');
}
/**
* Get the contact record associated with the debt.
*/
public function contacts()
{
return $this->belongsToMany('App\Contact')->withPivot('account_id')->withTimestamps();
}
}
+2 -2
View File
@@ -13,10 +13,10 @@
"animate.css": "^3.5.2",
"octicons": "^4.3.0",
"hint.css": "hint-css#^2.3.2",
"trix": "^0.9.9",
"font-awesome": "fontawesome#^4.7.0",
"list.js": "^1.5.0",
"typeahead.js": "^0.11.1",
"jQuery": "^3.2.1"
"jQuery": "^3.2.1",
"jquery.tagsinput": "jquery-tags-input#^1.3.6"
}
}
+1 -1
View File
@@ -88,5 +88,5 @@ return [
| should not change this setting yourself.
|
*/
'app_version' => '0.2.1',
'app_version' => '0.3.0',
];
@@ -0,0 +1,32 @@
<?php
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class CreateTagsTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('tags', function (Blueprint $table) {
$table->increments('id');
$table->integer('account_id');
$table->string('name');
$table->string('name_slug');
$table->mediumText('description')->nullable();
$table->timestamps();
});
Schema::create('contact_tag', function (Blueprint $table) {
$table->integer('contact_id');
$table->integer('tag_id');
$table->integer('account_id');
$table->timestamps();
});
}
}
@@ -0,0 +1,20 @@
<?php
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class AddTagsToStatistics extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::table('statistics', function ($table) {
$table->integer('number_of_tags')->after('number_of_accounts_with_more_than_one_user')->nullable();
});
}
}
+3
View File
@@ -9,6 +9,9 @@ elixir((mix) => {
mix.copy('resources/assets/js/stripe_js.js', 'public/js');
mix.copy('resources/vendor/jquery/dist/jquery.min.js', 'resources/assets/js/vendors/');
mix.copy('resources/vendor/typeahead.js/dist/typeahead.bundle.min.js', 'resources/assets/js/vendors/');
mix.copy('resources/vendor/jquery.tagsinput/src/jquery.tagsinput.js', 'public/js');
mix.copy('resources/vendor/jquery.tagsinput/src/jquery.tagsinput.js', 'public/js');
mix.copy('resources/assets/js/tags.js', 'public/js');
mix.sass('app.scss')
.webpack([
@@ -2962,9 +2962,9 @@ input[type="checkbox"].disabled {
}
}
/*! Hint.css - v2.5.0 - 2017-04-23
/*! Hint.css - v2.4.1 - 2016-11-08
* http://kushagragour.in/lab/hint/
* Copyright (c) 2017 Kushagra Gour */
* Copyright (c) 2016 Kushagra Gour */
[class*=hint--] {
position: relative;
display: inline-block;
@@ -2978,13 +2978,16 @@ input[type="checkbox"].disabled {
opacity: 0;
z-index: 1000000;
pointer-events: none;
-webkit-transition: .3s ease;
transition: .3s ease;
-webkit-transition-delay: 0s;
transition-delay: 0s;
}
[class*=hint--]:hover:after, [class*=hint--]:hover:before {
visibility: visible;
opacity: 1;
-webkit-transition-delay: .1s;
transition-delay: .1s;
}
@@ -3384,325 +3387,75 @@ input[type="checkbox"].disabled {
}
.hint--no-animate:after, .hint--no-animate:before {
-webkit-transition-duration: 0s;
transition-duration: 0s;
}
.hint--bounce:after, .hint--bounce:before {
-webkit-transition: opacity 0.3s ease, visibility 0.3s ease, -webkit-transform 0.3s cubic-bezier(0.71, 1.7, 0.77, 1.24);
transition: opacity 0.3s ease, visibility 0.3s ease, -webkit-transform 0.3s cubic-bezier(0.71, 1.7, 0.77, 1.24);
transition: opacity 0.3s ease, visibility 0.3s ease, transform 0.3s cubic-bezier(0.71, 1.7, 0.77, 1.24);
transition: opacity 0.3s ease, visibility 0.3s ease, transform 0.3s cubic-bezier(0.71, 1.7, 0.77, 1.24), -webkit-transform 0.3s cubic-bezier(0.71, 1.7, 0.77, 1.24);
}
/*
Trix 0.9.10
Copyright © 2016 Basecamp, LLC
http://trix-editor.org/*/
trix-editor {
color: #111;
border: 1px solid #bbb;
border-radius: 3px;
margin: 0;
padding: 4px 8px;
min-height: 54px;
outline: none;
div.tagsinput {
border: 1px solid #CCC;
background: #FFF;
padding: 5px;
width: 300px;
height: 100px;
overflow-y: auto;
}
trix-toolbar * {
box-sizing: border-box;
}
trix-toolbar .button_group {
display: inline-block;
font-size: 0;
margin: 0 8px 4px 0;
border: 1px solid #bbb;
border-top-color: #ccc;
border-bottom-color: #888;
border-radius: 5px;
overflow: hidden;
}
trix-toolbar .button_group:last-of-type {
margin-right: 0;
}
trix-toolbar .button_group button, trix-toolbar .button_group input[type=button] {
position: relative;
font-size: 0;
margin: 0;
height: 28px;
width: 40px;
background: #fff;
border: none;
border-bottom: 1px solid #ddd;
}
trix-toolbar .button_group button::before, trix-toolbar .button_group input[type=button]::before {
display: inline-block;
position: absolute;
top: 0;
right: 0;
bottom: 0;
left: 0;
background-position: center;
background-repeat: no-repeat;
opacity: .6;
content: "";
}
trix-toolbar .button_group button.active, trix-toolbar .button_group input[type=button].active {
background: #cbeefa;
}
trix-toolbar .button_group button.active::before, trix-toolbar .button_group input[type=button].active::before {
opacity: 1;
}
trix-toolbar .button_group button:disabled::before, trix-toolbar .button_group input[type=button]:disabled::before {
opacity: .125;
}
trix-toolbar .button_group button:not(:first-child), trix-toolbar .button_group input[type=button]:not(:first-child) {
border-left: 1px solid #ccc;
}
trix-toolbar .dialogs {
position: relative;
}
trix-toolbar .dialogs .dialog {
position: absolute;
top: 0;
left: 0;
right: 0;
padding: 12px 8px;
line-height: 12px;
background: #fff;
box-shadow: 0 0.3rem 1rem #ccc;
border-top: 2px solid #888;
border-radius: 5px;
z-index: 5;
}
trix-toolbar .dialogs .dialog input[type=button] {
font-size: 12px;
height: 24px;
width: 50px;
padding: 1px 8px 0 8px;
width: auto;
opacity: .6;
-webkit-appearance: none;
-webkit-border-radius: 0;
}
trix-toolbar .dialogs .dialog input[type=url], trix-toolbar .dialogs .dialog input[type=text] {
display: inline-block;
height: 26px;
font-size: 12px;
padding: 0 8px;
margin: 0 8px 0 0;
border-radius: 5px;
border: 1px solid #bbb;
background-color: #fff;
box-shadow: none;
outline: none;
-webkit-appearance: none;
-moz-appearance: none;
}
trix-toolbar .dialogs .dialog input[type=url].validate:invalid, trix-toolbar .dialogs .dialog input[type=text].validate:invalid {
box-shadow: #F00 0px 0px 1.5px 1px;
}
trix-toolbar .dialogs .dialog.link_dialog {
min-width: 300px;
max-width: 600px;
}
trix-toolbar .dialogs .dialog.link_dialog .button_group {
max-width: 110px;
}
trix-toolbar .dialogs .dialog.link_dialog input[type=url] {
div.tagsinput span.tag {
border: 1px solid #a5d24a;
-moz-border-radius: 2px;
-webkit-border-radius: 2px;
display: block;
float: left;
width: calc(100% - 120px);
}
trix-toolbar .button_group button.bold::before {
background-image: url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%3E%3Cpath%20d%3D%22M15.6%2011.8c1-.7%201.6-1.8%201.6-2.8a4%204%200%200%200-4-4H7v14h7c2%200%203.7-1.7%203.7-3.8%200-1.5-.8-2.8-2-3.4zM10%207.5h3a1.5%201.5%200%200%201%200%203h-3v-3zm3.5%209H10v-3h3.5a1.5%201.5%200%200%201%200%203z%22%2F%3E%3C%2Fsvg%3E");
}
trix-toolbar .button_group button.italic::before {
background-image: url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%3E%3Cpath%20d%3D%22M10%205v3h2.2l-3.4%208H6v3h8v-3h-2.2l3.4-8H18V5h-8z%22%2F%3E%3C%2Fsvg%3E");
}
trix-toolbar .button_group button.link::before {
background-image: url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%3E%3Cpath%20d%3D%22M9.88%2013.7a4.3%204.3%200%200%201%200-6.07l3.37-3.37a4.26%204.26%200%200%201%206.07%200%204.3%204.3%200%200%201%200%206.06l-1.96%201.72a.9.9%200%200%201-1.3-1.3l1.97-1.7a2.46%202.46%200%200%200-3.48-3.5l-3.38%203.38a2.46%202.46%200%200%200%200%203.48.9.9%200%200%201-1.3%201.3z%22%2F%3E%3Cpath%20d%3D%22M4.25%2019.46a4.3%204.3%200%200%201%200-6.07l1.93-1.9a.9.9%200%200%201%201.3%201.27l-1.93%201.9a2.46%202.46%200%200%200%203.48%203.5l3.37-3.4c.96-.95.96-2.5%200-3.47a.9.9%200%200%201%201.3-1.28%204.3%204.3%200%200%201%200%206.06l-3.38%203.38a4.26%204.26%200%200%201-6.07%200z%22%2F%3E%3C%2Fsvg%3E");
}
trix-toolbar .button_group button.strike::before {
background-image: url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%3E%3Cpath%20d%3D%22M12.73%2014l.28.14c.3.15.5.3.6.44.1.14.2.3.2.5%200%20.3-.1.56-.4.75-.3.2-.75.3-1.4.3a13.52%2013.52%200%200%201-5-1.18v3.38a10.64%2010.64%200%200%200%204.86.88%209.5%209.5%200%200%200%203.28-.5c.93-.34%201.64-.9%202.14-1.54s.74-1.45.74-2.32c0-.25%200-.5-.05-.74h-5.2zm-5.5-4c-.08-.34-.12-.7-.12-1.1%200-1.3.6-2.3%201.6-3.02a7.75%207.75%200%200%201%204.4-1.08c1.6%200%203.3.34%205%201l-1.3%202.93c-1.47-.6-2.73-.9-3.8-.9-.55%200-.96.08-1.2.26a.7.7%200%200%200-.38.6c0%20.2.16.5.48.7.18.1.54.3%201.06.5h-5.7zM3%2013h18v-2H3v2z%22%2F%3E%3C%2Fsvg%3E");
}
trix-toolbar .button_group button.quote::before {
background-image: url("data:image/svg+xml,%3Csvg%20version%3D%221%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%3E%3Cpath%20d%3D%22M6%2017h3l2-4V7H5v6h3zm8%200h3l2-4V7h-6v6h3z%22%2F%3E%3C%2Fsvg%3E");
}
trix-toolbar .button_group button.heading-1::before {
background-image: url("data:image/svg+xml,%3Csvg%20version%3D%221%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%3E%3Cpath%20d%3D%22M12%209v3H9v7H6v-7H3V9h9zM8%204h14v3h-6v12h-3V7H8V4z%22%2F%3E%3C%2Fsvg%3E");
}
trix-toolbar .button_group button.code::before {
background-image: url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%3E%3Cpath%20d%3D%22M18.2%2012L15%2015.2l1.4%201.4L21%2012l-4.6-4.6L15%208.8l3.2%203.2zM5.8%2012L9%208.8%207.6%207.4%203%2012l4.6%204.6L9%2015.2%205.8%2012z%22%2F%3E%3C%2Fsvg%3E");
}
trix-toolbar .button_group button.bullets::before {
background-image: url("data:image/svg+xml,%3Csvg%20version%3D%221%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%3E%3Cpath%20d%3D%22M4%204a2%202%200%201%200%200%204%202%202%200%200%200%200-4zm0%206a2%202%200%201%200%200%204%202%202%200%200%200%200-4zm0%206a2%202%200%201%200%200%204%202%202%200%200%200%200-4zm4%203h14v-2H8v2zm0-6h14v-2H8v2zm0-8v2h14V5H8z%22%2F%3E%3C%2Fsvg%3E");
}
trix-toolbar .button_group button.numbers::before {
background-image: url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%3E%3Cpath%20d%3D%22M2%2017h2v.5H3v1h1v.5H2v1h3v-4H2v1zm1-9h1V4H2v1h1v3zm-1%203h1.8L2%2013v1h3v-1H3.2L5%2011v-1H2v1zm5-6v2h14V5H7zm0%2014h14v-2H7v2zm0-6h14v-2H7v2z%22%2F%3E%3C%2Fsvg%3E");
}
trix-toolbar .button_group button.nesting-level.decrease::before, trix-toolbar .button_group button.block-level.decrease::before {
background-image: url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%3E%3Cpath%20d%3D%22M3%2019h19v-2H3v2zm7-6h12v-2H10v2zm-8.3-.3l2.8%203L6%2014l-2.3-2%202-2-1.3-1.5L1%2012l.7.7zM3%205v2h19V5H3z%22%2F%3E%3C%2Fsvg%3E");
}
trix-toolbar .button_group button.nesting-level.increase::before, trix-toolbar .button_group button.block-level.increase::before {
background-image: url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%3E%3Cpath%20d%3D%22M3%2019h19v-2H3v2zm7-6h12v-2H10v2zm-7-1l-2%202.2%201.4%201.4L6%2012l-.8-.7-2.8-2.8L1%2010l2%202zm0-7v2h19V5H3z%22%2F%3E%3C%2Fsvg%3E");
}
trix-toolbar .button_group button.undo::before {
background-image: url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%3E%3Cpath%20d%3D%22M12.5%208c-2.6%200-5%201-7%202.6L2%207v9h9l-3.6-3.6A8%208%200%200%201%2020%2016l2.4-.8a10.5%2010.5%200%200%200-10-7.2z%22%2F%3E%3C%2Fsvg%3E");
}
trix-toolbar .button_group button.redo::before {
background-image: url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%3E%3Cpath%20d%3D%22M18.4%2010.6a10.5%2010.5%200%200%200-17%204.6L4%2016a8%208%200%200%201%2012.6-3.6L13%2016h9V7l-3.6%203.6z%22%2F%3E%3C%2Fsvg%3E");
}
trix-editor [data-trix-mutable=true] {
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
}
trix-editor [data-trix-mutable=true] img {
box-shadow: 0 0 0 2px highlight;
}
trix-editor .attachment .remove {
display: block;
position: absolute;
top: -12px;
right: -12px;
width: 24px;
height: 24px;
border-radius: 24px;
line-height: 22px;
font-size: 0;
color: black;
text-align: center;
padding: 5px;
text-decoration: none;
background-color: #fff;
border: 1px solid #bbb;
box-shadow: 1px 1px 10px rgba(0, 0, 0, 0.1);
background: #cde69c;
color: #638421;
margin-right: 5px;
margin-bottom: 5px;
font-family: helvetica;
font-size: 13px;
}
trix-editor .attachment .remove:after {
content: '×';
font-size: 18px;
font-weight: bold;
opacity: 0.6;
div.tagsinput span.tag a {
font-weight: 700;
color: #82ad2b;
text-decoration: none;
font-size: 11px;
}
trix-editor .attachment .remove:hover:after {
opacity: 1;
div.tagsinput input {
width: 80px;
margin: 0 5px 5px 0;
font-family: helvetica;
font-size: 13px;
border: 1px solid transparent;
padding: 5px;
background: 0 0;
color: #000;
outline: 0;
}
trix-editor .attachment .caption.caption-editing textarea {
div.tagsinput div {
display: block;
float: left;
}
.tags_clear {
clear: both;
width: 100%;
margin: 0;
padding: 0;
font-size: 13px;
line-height: 13px;
text-align: center;
border: none;
outline: none;
-webkit-appearance: none;
-moz-appearance: none;
height: 0;
}
.trix-content h1 {
font-size: 1.6em;
margin: 10px 0;
}
.trix-content blockquote {
margin: 0 0 0 5px;
padding: 0 0 0 10px;
border-left: 5px solid #ccc;
}
.trix-content pre {
font-family: monospace;
font-size: 12px;
margin: 0;
padding: 10px;
white-space: pre-wrap;
background-color: #eee;
}
.trix-content ul, .trix-content ol, .trix-content li {
margin: 0;
padding: 0;
}
.trix-content ul li, .trix-content ol li, .trix-content li li {
margin-left: 20px;
}
.trix-content img {
max-width: 100%;
height: auto;
}
.trix-content a[data-trix-attachment] {
color: inherit;
text-decoration: none;
}
.trix-content a[data-trix-attachment]:hover, .trix-content a[data-trix-attachment]:visited:hover {
color: inherit;
}
.trix-content .attachment {
position: relative;
display: inline-block;
max-width: 100%;
margin: 0;
padding: 0;
color: #666;
font-size: 13px;
}
.trix-content .attachment.attachment-file {
color: #333;
line-height: 30px;
padding: 0 16px;
border: 1px solid #bbb;
border-radius: 5px;
}
.trix-content .attachment .caption {
display: block;
margin: 4px auto 0 auto;
padding: 0;
text-align: center;
}
.trix-content .attachment .caption .size:before {
content: ' · ';
.not_valid {
background: #FBD8DB !important;
color: #90111A !important;
}
table.dataTable {
@@ -7710,6 +7463,7 @@ div.table-responsive > div.dataTables_wrapper > div.row > div[class^="col-"]:las
-ms-user-select: none;
user-select: none;
background-color: #eee;
background-image: -webkit-linear-gradient(#fcfcfc, #eee);
background-image: linear-gradient(#fcfcfc, #eee);
border: 1px solid #d5d5d5;
border-radius: 3px;
@@ -7722,6 +7476,7 @@ div.table-responsive > div.dataTables_wrapper > div.row > div[class^="col-"]:las
.btn:hover {
background-color: #ddd;
background-image: -webkit-linear-gradient(#eee, #ddd);
background-image: linear-gradient(#eee, #ddd);
border-color: #ccc;
color: #333;
@@ -7730,6 +7485,7 @@ div.table-responsive > div.dataTables_wrapper > div.row > div[class^="col-"]:las
.btn-primary {
background-color: #60b044;
background-image: -webkit-linear-gradient(#8add6d, #60b044);
background-image: linear-gradient(#8add6d, #60b044);
border-color: #5ca941;
color: #fff;
@@ -7738,6 +7494,7 @@ div.table-responsive > div.dataTables_wrapper > div.row > div[class^="col-"]:las
.btn-primary:hover {
background-color: #569e3d;
background-image: -webkit-linear-gradient(#79d858, #569e3d);
background-image: linear-gradient(#79d858, #569e3d);
border-color: #4a993e;
color: #fff;
@@ -7749,6 +7506,7 @@ div.table-responsive > div.dataTables_wrapper > div.row > div[class^="col-"]:las
.btn-danger:hover {
background-color: #b33630;
background-image: -webkit-linear-gradient(#dc5f59, #b33630);
background-image: linear-gradient(#dc5f59, #b33630);
border-color: #cd504a;
color: #fff;
@@ -8053,12 +7811,6 @@ header .main-cta {
margin-top: 20px;
}
.people-list #search-list .search {
margin-bottom: 20px;
padding: 15px;
width: 100%;
}
.people-list .sidebar .sidebar-cta {
margin-bottom: 20px;
padding: 15px;
@@ -8079,11 +7831,27 @@ header .main-cta {
position: absolute;
}
.people-list .sidebar li .number-contacts-per-tag {
float: right;
}
.people-list .list {
border: 1px solid #eee;
border-radius: 3px;
}
.people-list .clear-filter {
border: 1px solid #eee;
position: relative;
padding: 6px;
border-radius: 3px;
}
.people-list .clear-filter a {
position: absolute;
right: 10px;
}
.people-list .people-list-item {
border-bottom: 1px solid #eee;
padding: 10px;
@@ -8165,16 +7933,6 @@ header .main-cta {
color: #333;
}
.people-list .people-list-item .people-list-item-name {
display: inline-block;
margin-right: -9999px;
white-space: nowrap;
text-overflow: ellipsis;
width: calc(100% - 198px);
overflow: hidden;
vertical-align: middle;
}
.people-list .people-list-item .people-list-item-information {
color: #999;
font-style: italic;
@@ -8183,6 +7941,10 @@ header .main-cta {
position: relative;
}
.people-list .people-list-item .people-list-item-information span {
display: block;
}
.people-list .people-list-item .people-list-item-information span {
font-size: 0.8rem;
}
@@ -8214,6 +7976,7 @@ header .main-cta {
background-color: #f9f9fb;
border-bottom: 1px solid #eee;
position: relative;
padding-bottom: 20px;
}
.people-show .pagehead .people-profile-information {
@@ -8266,6 +8029,7 @@ header .main-cta {
.people-show .pagehead .people-profile-information .profile-detail-summary {
padding-left: 100px;
margin-top: 3px;
}
.people-show .pagehead .people-profile-information .profile-detail-summary li:not(:last-child) {
@@ -8279,6 +8043,39 @@ header .main-cta {
margin-left: 14px;
}
.people-show .pagehead .people-profile-information #tagsForm {
padding-left: 100px;
position: relative;
}
.people-show .pagehead .people-profile-information #tagsForm #tags_tagsinput {
height: 40px !important;
min-height: 40px !important;
width: 370px !important;
display: inline-block;
overflow: hidden;
}
.people-show .pagehead .people-profile-information #tagsForm .tagsFormActions {
display: inline;
position: relative;
top: -17px;
}
.people-show .pagehead .people-profile-information .tags {
padding: 0;
padding-left: 100px;
list-style: none;
line-height: 20px;
margin: 0;
overflow: hidden;
margin-top: 8px;
}
.people-show .pagehead .people-profile-information .tags li {
float: left;
}
.people-show .pagehead .edit-information {
position: absolute;
right: 0;
@@ -8657,13 +8454,35 @@ header .main-cta {
.people-list .people-list-mobile li {
padding: 6px 0;
}
.people-list .people-list-item .people-list-item-information {
display: none;
}
.people-show .pagehead .people-profile-information {
margin-bottom: 20px;
margin-top: 10px;
}
.people-show .pagehead .people-profile-information h2 {
padding-left: 80px;
}
.people-show .pagehead .people-profile-information h2 span {
display: none;
}
.people-show .pagehead .people-profile-information #tagsForm {
display: block;
margin-top: 40px;
padding-left: 0px;
}
.people-show .pagehead .people-profile-information #tagsForm #tags_tagsinput {
width: 100% !important;
}
.people-show .pagehead .people-profile-information #tagsForm .tagsFormActions {
display: block;
margin-top: 20px;
}
.people-show .pagehead .people-profile-information .profile-detail-summary {
padding-left: 0;
margin-top: 10px;
}
.people-show .pagehead .people-profile-information .profile-detail-summary li {
display: block;
margin-right: 0;
@@ -8672,6 +8491,14 @@ header .main-cta {
content: '';
margin-left: 0;
}
.people-show .pagehead .people-profile-information .avatar {
height: 67px;
width: 67px;
padding-top: 11px;
}
.people-show .pagehead .people-profile-information .tags {
padding-left: 80px;
}
.people-show .pagehead .edit-information {
position: relative;
width: 100%;
@@ -9034,10 +8861,19 @@ header .main-cta {
background-color: #f7fbfc;
}
.settings .sidebar-menu li.selected i {
color: green;
}
.settings .sidebar-menu li a {
width: 100%;
}
.settings .sidebar-menu li i {
margin-right: 5px;
color: #999;
}
.settings h3 {
border-bottom: 1px solid #dfdfdf;
font-size: 20px;
@@ -9256,6 +9092,15 @@ header .main-cta {
list-style-type: disc;
}
.settings .tags-list .tags-list-contact-number {
margin-left: 10px;
color: #999;
}
.settings .tags-list .actions {
text-align: right;
}
.border-bottom {
border-bottom: 1px solid #dfdfdf;
}
@@ -9304,6 +9149,51 @@ header .main-cta {
background-color: #d9534f;
}
.pretty-tag {
background: #eee;
border-radius: 3px;
color: #555;
display: inline-block;
font-size: 11px;
height: 22px;
line-height: 22px;
padding: 0 10px 0 19px;
position: relative;
margin: 0 10px 0 0;
text-decoration: none;
-webkit-transition: color 0.2s;
}
.pretty-tag::before {
background: #fff;
border-radius: 10px;
box-shadow: inset 0 1px rgba(0, 0, 0, 0.25);
content: '';
height: 6px;
left: 7px;
position: absolute;
width: 6px;
top: 9px;
}
.pretty-tag:hover {
background-color: #0366d6;
}
.pretty-tag:hover a {
color: #fff;
}
.pretty-tag a {
text-decoration: none;
color: #555;
}
.pretty-tag a:hover {
background-color: transparent;
color: #fff;
}
body {
color: #323b43;
}
@@ -9417,6 +9307,8 @@ input:disabled {
.btn {
color: #24292e;
background-color: #eff3f6;
background-image: -webkit-linear-gradient(270deg, #fafbfc 0%, #eff3f6 90%);
background-image: -webkit-linear-gradient(top, #fafbfc 0%, #eff3f6 90%);
background-image: linear-gradient(-180deg, #fafbfc 0%, #eff3f6 90%);
position: relative;
display: inline-block;
@@ -9445,6 +9337,8 @@ input:disabled {
.btn:hover, .btn:visited {
text-decoration: none;
background-color: #e6ebf1;
background-image: -webkit-linear-gradient(270deg, #f0f3f6 0%, #e6ebf1 90%);
background-image: -webkit-linear-gradient(top, #f0f3f6 0%, #e6ebf1 90%);
background-image: linear-gradient(-180deg, #f0f3f6 0%, #e6ebf1 90%);
background-position: 0 -0.5em;
background-repeat: repeat-x;
@@ -9459,17 +9353,22 @@ input:disabled {
}
.btn:disabled {
background-image: -webkit-linear-gradient(top, #63b175 0%, #61986e 90%);
background-image: linear-gradient(-180deg, #63b175 0%, #61986e 90%);
}
.btn-primary {
color: #fff;
background-color: #28a745;
background-image: -webkit-linear-gradient(270deg, #34d058 0%, #28a745 90%);
background-image: -webkit-linear-gradient(top, #34d058 0%, #28a745 90%);
background-image: linear-gradient(-180deg, #34d058 0%, #28a745 90%);
}
.btn-primary:hover {
background-color: #269f42;
background-image: -webkit-linear-gradient(270deg, #2fcb53 0%, #269f42 90%);
background-image: -webkit-linear-gradient(top, #2fcb53 0%, #269f42 90%);
background-image: linear-gradient(-180deg, #2fcb53 0%, #269f42 90%);
background-position: 0 -0.5em;
border-color: rgba(27, 31, 35, 0.5);
File diff suppressed because one or more lines are too long
@@ -123,7 +123,7 @@ eval("/* (ignored) *///# sourceMappingURL=data:application/json;charset=utf-8;ba
/* 9 */
/***/ function(module, exports, __webpack_require__) {
eval("\n/**\n * First we will load all of this project's JavaScript dependencies which\n * include Vue and Vue Resource. This gives a great starting point for\n * building robust, powerful web applications using Vue and Laravel.\n */\n\n__webpack_require__(1);\n\n/**\n * Next, we will create a fresh Vue application instance and attach it to\n * the page. Then, you may begin adding components to this application\n * or customize the JavaScript scaffolding to fit your unique needs.\n */\n\n//Vue.component('example', require('./components/people/dashboard/kids.vue'));\n\nvar app = new Vue({\n el: '#app',\n\n data: {\n activities_description_show: false,\n reminders_frequency: 'once',\n accept_invite_user: false,\n },\n methods: {\n },\n});\n\n$(document).ready(function() {\n} );\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOS5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy9yZXNvdXJjZXMvYXNzZXRzL2pzL2FwcC5qcz84YjY3Il0sInNvdXJjZXNDb250ZW50IjpbIlxuLyoqXG4gKiBGaXJzdCB3ZSB3aWxsIGxvYWQgYWxsIG9mIHRoaXMgcHJvamVjdCdzIEphdmFTY3JpcHQgZGVwZW5kZW5jaWVzIHdoaWNoXG4gKiBpbmNsdWRlIFZ1ZSBhbmQgVnVlIFJlc291cmNlLiBUaGlzIGdpdmVzIGEgZ3JlYXQgc3RhcnRpbmcgcG9pbnQgZm9yXG4gKiBidWlsZGluZyByb2J1c3QsIHBvd2VyZnVsIHdlYiBhcHBsaWNhdGlvbnMgdXNpbmcgVnVlIGFuZCBMYXJhdmVsLlxuICovXG5cbnJlcXVpcmUoJy4vYm9vdHN0cmFwJyk7XG5cbi8qKlxuICogTmV4dCwgd2Ugd2lsbCBjcmVhdGUgYSBmcmVzaCBWdWUgYXBwbGljYXRpb24gaW5zdGFuY2UgYW5kIGF0dGFjaCBpdCB0b1xuICogdGhlIHBhZ2UuIFRoZW4sIHlvdSBtYXkgYmVnaW4gYWRkaW5nIGNvbXBvbmVudHMgdG8gdGhpcyBhcHBsaWNhdGlvblxuICogb3IgY3VzdG9taXplIHRoZSBKYXZhU2NyaXB0IHNjYWZmb2xkaW5nIHRvIGZpdCB5b3VyIHVuaXF1ZSBuZWVkcy5cbiAqL1xuXG4vL1Z1ZS5jb21wb25lbnQoJ2V4YW1wbGUnLCByZXF1aXJlKCcuL2NvbXBvbmVudHMvcGVvcGxlL2Rhc2hib2FyZC9raWRzLnZ1ZScpKTtcblxuY29uc3QgYXBwID0gbmV3IFZ1ZSh7XG4gICAgZWw6ICcjYXBwJyxcblxuICAgIGRhdGE6IHtcbiAgICAgIGFjdGl2aXRpZXNfZGVzY3JpcHRpb25fc2hvdzogZmFsc2UsXG4gICAgICByZW1pbmRlcnNfZnJlcXVlbmN5OiAnb25jZScsXG4gICAgICBhY2NlcHRfaW52aXRlX3VzZXI6IGZhbHNlLFxuICAgIH0sXG4gICAgbWV0aG9kczoge1xuICAgIH0sXG59KTtcblxuJChkb2N1bWVudCkucmVhZHkoZnVuY3Rpb24oKSB7XG59ICk7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gcmVzb3VyY2VzL2Fzc2V0cy9qcy9hcHAuanMiXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7O0FBT0E7QUFDQTs7Ozs7Ozs7O0FBU0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=");
eval("\n/**\n * First we will load all of this project's JavaScript dependencies which\n * include Vue and Vue Resource. This gives a great starting point for\n * building robust, powerful web applications using Vue and Laravel.\n */\n\n__webpack_require__(1);\n\n/**\n * Next, we will create a fresh Vue application instance and attach it to\n * the page. Then, you may begin adding components to this application\n * or customize the JavaScript scaffolding to fit your unique needs.\n */\n\n//Vue.component('example', require('./components/people/dashboard/kids.vue'));\n\nvar app = new Vue({\n el: '#app',\n\n data: {\n activities_description_show: false,\n reminders_frequency: 'once',\n accept_invite_user: false,\n },\n methods: {\n },\n});\n\n// jQuery-Tags-Input for the tags on the contact\n$(document).ready(function() {\n} );\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOS5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy9yZXNvdXJjZXMvYXNzZXRzL2pzL2FwcC5qcz84YjY3Il0sInNvdXJjZXNDb250ZW50IjpbIlxuLyoqXG4gKiBGaXJzdCB3ZSB3aWxsIGxvYWQgYWxsIG9mIHRoaXMgcHJvamVjdCdzIEphdmFTY3JpcHQgZGVwZW5kZW5jaWVzIHdoaWNoXG4gKiBpbmNsdWRlIFZ1ZSBhbmQgVnVlIFJlc291cmNlLiBUaGlzIGdpdmVzIGEgZ3JlYXQgc3RhcnRpbmcgcG9pbnQgZm9yXG4gKiBidWlsZGluZyByb2J1c3QsIHBvd2VyZnVsIHdlYiBhcHBsaWNhdGlvbnMgdXNpbmcgVnVlIGFuZCBMYXJhdmVsLlxuICovXG5cbnJlcXVpcmUoJy4vYm9vdHN0cmFwJyk7XG5cbi8qKlxuICogTmV4dCwgd2Ugd2lsbCBjcmVhdGUgYSBmcmVzaCBWdWUgYXBwbGljYXRpb24gaW5zdGFuY2UgYW5kIGF0dGFjaCBpdCB0b1xuICogdGhlIHBhZ2UuIFRoZW4sIHlvdSBtYXkgYmVnaW4gYWRkaW5nIGNvbXBvbmVudHMgdG8gdGhpcyBhcHBsaWNhdGlvblxuICogb3IgY3VzdG9taXplIHRoZSBKYXZhU2NyaXB0IHNjYWZmb2xkaW5nIHRvIGZpdCB5b3VyIHVuaXF1ZSBuZWVkcy5cbiAqL1xuXG4vL1Z1ZS5jb21wb25lbnQoJ2V4YW1wbGUnLCByZXF1aXJlKCcuL2NvbXBvbmVudHMvcGVvcGxlL2Rhc2hib2FyZC9raWRzLnZ1ZScpKTtcblxuY29uc3QgYXBwID0gbmV3IFZ1ZSh7XG4gICAgZWw6ICcjYXBwJyxcblxuICAgIGRhdGE6IHtcbiAgICAgIGFjdGl2aXRpZXNfZGVzY3JpcHRpb25fc2hvdzogZmFsc2UsXG4gICAgICByZW1pbmRlcnNfZnJlcXVlbmN5OiAnb25jZScsXG4gICAgICBhY2NlcHRfaW52aXRlX3VzZXI6IGZhbHNlLFxuICAgIH0sXG4gICAgbWV0aG9kczoge1xuICAgIH0sXG59KTtcblxuLy8galF1ZXJ5LVRhZ3MtSW5wdXQgZm9yIHRoZSB0YWdzIG9uIHRoZSBjb250YWN0XG4kKGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbigpIHtcbn0gKTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyByZXNvdXJjZXMvYXNzZXRzL2pzL2FwcC5qcyJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7QUFPQTtBQUNBOzs7Ozs7Ozs7QUFTQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=");
/***/ }
/******/ ]);
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
+2 -2
View File
@@ -1,4 +1,4 @@
{
"css/app.css": "css/app-48dea24f08.css",
"js/app.js": "js/app-6d25e34006.js"
"css/app.css": "css/app-f87feda446.css",
"js/app.js": "js/app-734718f1b0.js"
}
+214 -315
View File
@@ -2962,9 +2962,9 @@ input[type="checkbox"].disabled {
}
}
/*! Hint.css - v2.5.0 - 2017-04-23
/*! Hint.css - v2.4.1 - 2016-11-08
* http://kushagragour.in/lab/hint/
* Copyright (c) 2017 Kushagra Gour */
* Copyright (c) 2016 Kushagra Gour */
[class*=hint--] {
position: relative;
display: inline-block;
@@ -2978,13 +2978,16 @@ input[type="checkbox"].disabled {
opacity: 0;
z-index: 1000000;
pointer-events: none;
-webkit-transition: .3s ease;
transition: .3s ease;
-webkit-transition-delay: 0s;
transition-delay: 0s;
}
[class*=hint--]:hover:after, [class*=hint--]:hover:before {
visibility: visible;
opacity: 1;
-webkit-transition-delay: .1s;
transition-delay: .1s;
}
@@ -3384,325 +3387,75 @@ input[type="checkbox"].disabled {
}
.hint--no-animate:after, .hint--no-animate:before {
-webkit-transition-duration: 0s;
transition-duration: 0s;
}
.hint--bounce:after, .hint--bounce:before {
-webkit-transition: opacity 0.3s ease, visibility 0.3s ease, -webkit-transform 0.3s cubic-bezier(0.71, 1.7, 0.77, 1.24);
transition: opacity 0.3s ease, visibility 0.3s ease, -webkit-transform 0.3s cubic-bezier(0.71, 1.7, 0.77, 1.24);
transition: opacity 0.3s ease, visibility 0.3s ease, transform 0.3s cubic-bezier(0.71, 1.7, 0.77, 1.24);
transition: opacity 0.3s ease, visibility 0.3s ease, transform 0.3s cubic-bezier(0.71, 1.7, 0.77, 1.24), -webkit-transform 0.3s cubic-bezier(0.71, 1.7, 0.77, 1.24);
}
/*
Trix 0.9.10
Copyright © 2016 Basecamp, LLC
http://trix-editor.org/*/
trix-editor {
color: #111;
border: 1px solid #bbb;
border-radius: 3px;
margin: 0;
padding: 4px 8px;
min-height: 54px;
outline: none;
div.tagsinput {
border: 1px solid #CCC;
background: #FFF;
padding: 5px;
width: 300px;
height: 100px;
overflow-y: auto;
}
trix-toolbar * {
box-sizing: border-box;
}
trix-toolbar .button_group {
display: inline-block;
font-size: 0;
margin: 0 8px 4px 0;
border: 1px solid #bbb;
border-top-color: #ccc;
border-bottom-color: #888;
border-radius: 5px;
overflow: hidden;
}
trix-toolbar .button_group:last-of-type {
margin-right: 0;
}
trix-toolbar .button_group button, trix-toolbar .button_group input[type=button] {
position: relative;
font-size: 0;
margin: 0;
height: 28px;
width: 40px;
background: #fff;
border: none;
border-bottom: 1px solid #ddd;
}
trix-toolbar .button_group button::before, trix-toolbar .button_group input[type=button]::before {
display: inline-block;
position: absolute;
top: 0;
right: 0;
bottom: 0;
left: 0;
background-position: center;
background-repeat: no-repeat;
opacity: .6;
content: "";
}
trix-toolbar .button_group button.active, trix-toolbar .button_group input[type=button].active {
background: #cbeefa;
}
trix-toolbar .button_group button.active::before, trix-toolbar .button_group input[type=button].active::before {
opacity: 1;
}
trix-toolbar .button_group button:disabled::before, trix-toolbar .button_group input[type=button]:disabled::before {
opacity: .125;
}
trix-toolbar .button_group button:not(:first-child), trix-toolbar .button_group input[type=button]:not(:first-child) {
border-left: 1px solid #ccc;
}
trix-toolbar .dialogs {
position: relative;
}
trix-toolbar .dialogs .dialog {
position: absolute;
top: 0;
left: 0;
right: 0;
padding: 12px 8px;
line-height: 12px;
background: #fff;
box-shadow: 0 0.3rem 1rem #ccc;
border-top: 2px solid #888;
border-radius: 5px;
z-index: 5;
}
trix-toolbar .dialogs .dialog input[type=button] {
font-size: 12px;
height: 24px;
width: 50px;
padding: 1px 8px 0 8px;
width: auto;
opacity: .6;
-webkit-appearance: none;
-webkit-border-radius: 0;
}
trix-toolbar .dialogs .dialog input[type=url], trix-toolbar .dialogs .dialog input[type=text] {
display: inline-block;
height: 26px;
font-size: 12px;
padding: 0 8px;
margin: 0 8px 0 0;
border-radius: 5px;
border: 1px solid #bbb;
background-color: #fff;
box-shadow: none;
outline: none;
-webkit-appearance: none;
-moz-appearance: none;
}
trix-toolbar .dialogs .dialog input[type=url].validate:invalid, trix-toolbar .dialogs .dialog input[type=text].validate:invalid {
box-shadow: #F00 0px 0px 1.5px 1px;
}
trix-toolbar .dialogs .dialog.link_dialog {
min-width: 300px;
max-width: 600px;
}
trix-toolbar .dialogs .dialog.link_dialog .button_group {
max-width: 110px;
}
trix-toolbar .dialogs .dialog.link_dialog input[type=url] {
div.tagsinput span.tag {
border: 1px solid #a5d24a;
-moz-border-radius: 2px;
-webkit-border-radius: 2px;
display: block;
float: left;
width: calc(100% - 120px);
}
trix-toolbar .button_group button.bold::before {
background-image: url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%3E%3Cpath%20d%3D%22M15.6%2011.8c1-.7%201.6-1.8%201.6-2.8a4%204%200%200%200-4-4H7v14h7c2%200%203.7-1.7%203.7-3.8%200-1.5-.8-2.8-2-3.4zM10%207.5h3a1.5%201.5%200%200%201%200%203h-3v-3zm3.5%209H10v-3h3.5a1.5%201.5%200%200%201%200%203z%22%2F%3E%3C%2Fsvg%3E");
}
trix-toolbar .button_group button.italic::before {
background-image: url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%3E%3Cpath%20d%3D%22M10%205v3h2.2l-3.4%208H6v3h8v-3h-2.2l3.4-8H18V5h-8z%22%2F%3E%3C%2Fsvg%3E");
}
trix-toolbar .button_group button.link::before {
background-image: url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%3E%3Cpath%20d%3D%22M9.88%2013.7a4.3%204.3%200%200%201%200-6.07l3.37-3.37a4.26%204.26%200%200%201%206.07%200%204.3%204.3%200%200%201%200%206.06l-1.96%201.72a.9.9%200%200%201-1.3-1.3l1.97-1.7a2.46%202.46%200%200%200-3.48-3.5l-3.38%203.38a2.46%202.46%200%200%200%200%203.48.9.9%200%200%201-1.3%201.3z%22%2F%3E%3Cpath%20d%3D%22M4.25%2019.46a4.3%204.3%200%200%201%200-6.07l1.93-1.9a.9.9%200%200%201%201.3%201.27l-1.93%201.9a2.46%202.46%200%200%200%203.48%203.5l3.37-3.4c.96-.95.96-2.5%200-3.47a.9.9%200%200%201%201.3-1.28%204.3%204.3%200%200%201%200%206.06l-3.38%203.38a4.26%204.26%200%200%201-6.07%200z%22%2F%3E%3C%2Fsvg%3E");
}
trix-toolbar .button_group button.strike::before {
background-image: url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%3E%3Cpath%20d%3D%22M12.73%2014l.28.14c.3.15.5.3.6.44.1.14.2.3.2.5%200%20.3-.1.56-.4.75-.3.2-.75.3-1.4.3a13.52%2013.52%200%200%201-5-1.18v3.38a10.64%2010.64%200%200%200%204.86.88%209.5%209.5%200%200%200%203.28-.5c.93-.34%201.64-.9%202.14-1.54s.74-1.45.74-2.32c0-.25%200-.5-.05-.74h-5.2zm-5.5-4c-.08-.34-.12-.7-.12-1.1%200-1.3.6-2.3%201.6-3.02a7.75%207.75%200%200%201%204.4-1.08c1.6%200%203.3.34%205%201l-1.3%202.93c-1.47-.6-2.73-.9-3.8-.9-.55%200-.96.08-1.2.26a.7.7%200%200%200-.38.6c0%20.2.16.5.48.7.18.1.54.3%201.06.5h-5.7zM3%2013h18v-2H3v2z%22%2F%3E%3C%2Fsvg%3E");
}
trix-toolbar .button_group button.quote::before {
background-image: url("data:image/svg+xml,%3Csvg%20version%3D%221%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%3E%3Cpath%20d%3D%22M6%2017h3l2-4V7H5v6h3zm8%200h3l2-4V7h-6v6h3z%22%2F%3E%3C%2Fsvg%3E");
}
trix-toolbar .button_group button.heading-1::before {
background-image: url("data:image/svg+xml,%3Csvg%20version%3D%221%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%3E%3Cpath%20d%3D%22M12%209v3H9v7H6v-7H3V9h9zM8%204h14v3h-6v12h-3V7H8V4z%22%2F%3E%3C%2Fsvg%3E");
}
trix-toolbar .button_group button.code::before {
background-image: url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%3E%3Cpath%20d%3D%22M18.2%2012L15%2015.2l1.4%201.4L21%2012l-4.6-4.6L15%208.8l3.2%203.2zM5.8%2012L9%208.8%207.6%207.4%203%2012l4.6%204.6L9%2015.2%205.8%2012z%22%2F%3E%3C%2Fsvg%3E");
}
trix-toolbar .button_group button.bullets::before {
background-image: url("data:image/svg+xml,%3Csvg%20version%3D%221%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%3E%3Cpath%20d%3D%22M4%204a2%202%200%201%200%200%204%202%202%200%200%200%200-4zm0%206a2%202%200%201%200%200%204%202%202%200%200%200%200-4zm0%206a2%202%200%201%200%200%204%202%202%200%200%200%200-4zm4%203h14v-2H8v2zm0-6h14v-2H8v2zm0-8v2h14V5H8z%22%2F%3E%3C%2Fsvg%3E");
}
trix-toolbar .button_group button.numbers::before {
background-image: url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%3E%3Cpath%20d%3D%22M2%2017h2v.5H3v1h1v.5H2v1h3v-4H2v1zm1-9h1V4H2v1h1v3zm-1%203h1.8L2%2013v1h3v-1H3.2L5%2011v-1H2v1zm5-6v2h14V5H7zm0%2014h14v-2H7v2zm0-6h14v-2H7v2z%22%2F%3E%3C%2Fsvg%3E");
}
trix-toolbar .button_group button.nesting-level.decrease::before, trix-toolbar .button_group button.block-level.decrease::before {
background-image: url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%3E%3Cpath%20d%3D%22M3%2019h19v-2H3v2zm7-6h12v-2H10v2zm-8.3-.3l2.8%203L6%2014l-2.3-2%202-2-1.3-1.5L1%2012l.7.7zM3%205v2h19V5H3z%22%2F%3E%3C%2Fsvg%3E");
}
trix-toolbar .button_group button.nesting-level.increase::before, trix-toolbar .button_group button.block-level.increase::before {
background-image: url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%3E%3Cpath%20d%3D%22M3%2019h19v-2H3v2zm7-6h12v-2H10v2zm-7-1l-2%202.2%201.4%201.4L6%2012l-.8-.7-2.8-2.8L1%2010l2%202zm0-7v2h19V5H3z%22%2F%3E%3C%2Fsvg%3E");
}
trix-toolbar .button_group button.undo::before {
background-image: url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%3E%3Cpath%20d%3D%22M12.5%208c-2.6%200-5%201-7%202.6L2%207v9h9l-3.6-3.6A8%208%200%200%201%2020%2016l2.4-.8a10.5%2010.5%200%200%200-10-7.2z%22%2F%3E%3C%2Fsvg%3E");
}
trix-toolbar .button_group button.redo::before {
background-image: url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%3E%3Cpath%20d%3D%22M18.4%2010.6a10.5%2010.5%200%200%200-17%204.6L4%2016a8%208%200%200%201%2012.6-3.6L13%2016h9V7l-3.6%203.6z%22%2F%3E%3C%2Fsvg%3E");
}
trix-editor [data-trix-mutable=true] {
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
}
trix-editor [data-trix-mutable=true] img {
box-shadow: 0 0 0 2px highlight;
}
trix-editor .attachment .remove {
display: block;
position: absolute;
top: -12px;
right: -12px;
width: 24px;
height: 24px;
border-radius: 24px;
line-height: 22px;
font-size: 0;
color: black;
text-align: center;
padding: 5px;
text-decoration: none;
background-color: #fff;
border: 1px solid #bbb;
box-shadow: 1px 1px 10px rgba(0, 0, 0, 0.1);
background: #cde69c;
color: #638421;
margin-right: 5px;
margin-bottom: 5px;
font-family: helvetica;
font-size: 13px;
}
trix-editor .attachment .remove:after {
content: '×';
font-size: 18px;
font-weight: bold;
opacity: 0.6;
div.tagsinput span.tag a {
font-weight: 700;
color: #82ad2b;
text-decoration: none;
font-size: 11px;
}
trix-editor .attachment .remove:hover:after {
opacity: 1;
div.tagsinput input {
width: 80px;
margin: 0 5px 5px 0;
font-family: helvetica;
font-size: 13px;
border: 1px solid transparent;
padding: 5px;
background: 0 0;
color: #000;
outline: 0;
}
trix-editor .attachment .caption.caption-editing textarea {
div.tagsinput div {
display: block;
float: left;
}
.tags_clear {
clear: both;
width: 100%;
margin: 0;
padding: 0;
font-size: 13px;
line-height: 13px;
text-align: center;
border: none;
outline: none;
-webkit-appearance: none;
-moz-appearance: none;
height: 0;
}
.trix-content h1 {
font-size: 1.6em;
margin: 10px 0;
}
.trix-content blockquote {
margin: 0 0 0 5px;
padding: 0 0 0 10px;
border-left: 5px solid #ccc;
}
.trix-content pre {
font-family: monospace;
font-size: 12px;
margin: 0;
padding: 10px;
white-space: pre-wrap;
background-color: #eee;
}
.trix-content ul, .trix-content ol, .trix-content li {
margin: 0;
padding: 0;
}
.trix-content ul li, .trix-content ol li, .trix-content li li {
margin-left: 20px;
}
.trix-content img {
max-width: 100%;
height: auto;
}
.trix-content a[data-trix-attachment] {
color: inherit;
text-decoration: none;
}
.trix-content a[data-trix-attachment]:hover, .trix-content a[data-trix-attachment]:visited:hover {
color: inherit;
}
.trix-content .attachment {
position: relative;
display: inline-block;
max-width: 100%;
margin: 0;
padding: 0;
color: #666;
font-size: 13px;
}
.trix-content .attachment.attachment-file {
color: #333;
line-height: 30px;
padding: 0 16px;
border: 1px solid #bbb;
border-radius: 5px;
}
.trix-content .attachment .caption {
display: block;
margin: 4px auto 0 auto;
padding: 0;
text-align: center;
}
.trix-content .attachment .caption .size:before {
content: ' · ';
.not_valid {
background: #FBD8DB !important;
color: #90111A !important;
}
table.dataTable {
@@ -7710,6 +7463,7 @@ div.table-responsive > div.dataTables_wrapper > div.row > div[class^="col-"]:las
-ms-user-select: none;
user-select: none;
background-color: #eee;
background-image: -webkit-linear-gradient(#fcfcfc, #eee);
background-image: linear-gradient(#fcfcfc, #eee);
border: 1px solid #d5d5d5;
border-radius: 3px;
@@ -7722,6 +7476,7 @@ div.table-responsive > div.dataTables_wrapper > div.row > div[class^="col-"]:las
.btn:hover {
background-color: #ddd;
background-image: -webkit-linear-gradient(#eee, #ddd);
background-image: linear-gradient(#eee, #ddd);
border-color: #ccc;
color: #333;
@@ -7730,6 +7485,7 @@ div.table-responsive > div.dataTables_wrapper > div.row > div[class^="col-"]:las
.btn-primary {
background-color: #60b044;
background-image: -webkit-linear-gradient(#8add6d, #60b044);
background-image: linear-gradient(#8add6d, #60b044);
border-color: #5ca941;
color: #fff;
@@ -7738,6 +7494,7 @@ div.table-responsive > div.dataTables_wrapper > div.row > div[class^="col-"]:las
.btn-primary:hover {
background-color: #569e3d;
background-image: -webkit-linear-gradient(#79d858, #569e3d);
background-image: linear-gradient(#79d858, #569e3d);
border-color: #4a993e;
color: #fff;
@@ -7749,6 +7506,7 @@ div.table-responsive > div.dataTables_wrapper > div.row > div[class^="col-"]:las
.btn-danger:hover {
background-color: #b33630;
background-image: -webkit-linear-gradient(#dc5f59, #b33630);
background-image: linear-gradient(#dc5f59, #b33630);
border-color: #cd504a;
color: #fff;
@@ -8053,12 +7811,6 @@ header .main-cta {
margin-top: 20px;
}
.people-list #search-list .search {
margin-bottom: 20px;
padding: 15px;
width: 100%;
}
.people-list .sidebar .sidebar-cta {
margin-bottom: 20px;
padding: 15px;
@@ -8079,11 +7831,27 @@ header .main-cta {
position: absolute;
}
.people-list .sidebar li .number-contacts-per-tag {
float: right;
}
.people-list .list {
border: 1px solid #eee;
border-radius: 3px;
}
.people-list .clear-filter {
border: 1px solid #eee;
position: relative;
padding: 6px;
border-radius: 3px;
}
.people-list .clear-filter a {
position: absolute;
right: 10px;
}
.people-list .people-list-item {
border-bottom: 1px solid #eee;
padding: 10px;
@@ -8165,16 +7933,6 @@ header .main-cta {
color: #333;
}
.people-list .people-list-item .people-list-item-name {
display: inline-block;
margin-right: -9999px;
white-space: nowrap;
text-overflow: ellipsis;
width: calc(100% - 198px);
overflow: hidden;
vertical-align: middle;
}
.people-list .people-list-item .people-list-item-information {
color: #999;
font-style: italic;
@@ -8183,6 +7941,10 @@ header .main-cta {
position: relative;
}
.people-list .people-list-item .people-list-item-information span {
display: block;
}
.people-list .people-list-item .people-list-item-information span {
font-size: 0.8rem;
}
@@ -8214,6 +7976,7 @@ header .main-cta {
background-color: #f9f9fb;
border-bottom: 1px solid #eee;
position: relative;
padding-bottom: 20px;
}
.people-show .pagehead .people-profile-information {
@@ -8266,6 +8029,7 @@ header .main-cta {
.people-show .pagehead .people-profile-information .profile-detail-summary {
padding-left: 100px;
margin-top: 3px;
}
.people-show .pagehead .people-profile-information .profile-detail-summary li:not(:last-child) {
@@ -8279,6 +8043,39 @@ header .main-cta {
margin-left: 14px;
}
.people-show .pagehead .people-profile-information #tagsForm {
padding-left: 100px;
position: relative;
}
.people-show .pagehead .people-profile-information #tagsForm #tags_tagsinput {
height: 40px !important;
min-height: 40px !important;
width: 370px !important;
display: inline-block;
overflow: hidden;
}
.people-show .pagehead .people-profile-information #tagsForm .tagsFormActions {
display: inline;
position: relative;
top: -17px;
}
.people-show .pagehead .people-profile-information .tags {
padding: 0;
padding-left: 100px;
list-style: none;
line-height: 20px;
margin: 0;
overflow: hidden;
margin-top: 8px;
}
.people-show .pagehead .people-profile-information .tags li {
float: left;
}
.people-show .pagehead .edit-information {
position: absolute;
right: 0;
@@ -8657,13 +8454,35 @@ header .main-cta {
.people-list .people-list-mobile li {
padding: 6px 0;
}
.people-list .people-list-item .people-list-item-information {
display: none;
}
.people-show .pagehead .people-profile-information {
margin-bottom: 20px;
margin-top: 10px;
}
.people-show .pagehead .people-profile-information h2 {
padding-left: 80px;
}
.people-show .pagehead .people-profile-information h2 span {
display: none;
}
.people-show .pagehead .people-profile-information #tagsForm {
display: block;
margin-top: 40px;
padding-left: 0px;
}
.people-show .pagehead .people-profile-information #tagsForm #tags_tagsinput {
width: 100% !important;
}
.people-show .pagehead .people-profile-information #tagsForm .tagsFormActions {
display: block;
margin-top: 20px;
}
.people-show .pagehead .people-profile-information .profile-detail-summary {
padding-left: 0;
margin-top: 10px;
}
.people-show .pagehead .people-profile-information .profile-detail-summary li {
display: block;
margin-right: 0;
@@ -8672,6 +8491,14 @@ header .main-cta {
content: '';
margin-left: 0;
}
.people-show .pagehead .people-profile-information .avatar {
height: 67px;
width: 67px;
padding-top: 11px;
}
.people-show .pagehead .people-profile-information .tags {
padding-left: 80px;
}
.people-show .pagehead .edit-information {
position: relative;
width: 100%;
@@ -9034,10 +8861,19 @@ header .main-cta {
background-color: #f7fbfc;
}
.settings .sidebar-menu li.selected i {
color: green;
}
.settings .sidebar-menu li a {
width: 100%;
}
.settings .sidebar-menu li i {
margin-right: 5px;
color: #999;
}
.settings h3 {
border-bottom: 1px solid #dfdfdf;
font-size: 20px;
@@ -9256,6 +9092,15 @@ header .main-cta {
list-style-type: disc;
}
.settings .tags-list .tags-list-contact-number {
margin-left: 10px;
color: #999;
}
.settings .tags-list .actions {
text-align: right;
}
.border-bottom {
border-bottom: 1px solid #dfdfdf;
}
@@ -9304,6 +9149,51 @@ header .main-cta {
background-color: #d9534f;
}
.pretty-tag {
background: #eee;
border-radius: 3px;
color: #555;
display: inline-block;
font-size: 11px;
height: 22px;
line-height: 22px;
padding: 0 10px 0 19px;
position: relative;
margin: 0 10px 0 0;
text-decoration: none;
-webkit-transition: color 0.2s;
}
.pretty-tag::before {
background: #fff;
border-radius: 10px;
box-shadow: inset 0 1px rgba(0, 0, 0, 0.25);
content: '';
height: 6px;
left: 7px;
position: absolute;
width: 6px;
top: 9px;
}
.pretty-tag:hover {
background-color: #0366d6;
}
.pretty-tag:hover a {
color: #fff;
}
.pretty-tag a {
text-decoration: none;
color: #555;
}
.pretty-tag a:hover {
background-color: transparent;
color: #fff;
}
body {
color: #323b43;
}
@@ -9417,6 +9307,8 @@ input:disabled {
.btn {
color: #24292e;
background-color: #eff3f6;
background-image: -webkit-linear-gradient(270deg, #fafbfc 0%, #eff3f6 90%);
background-image: -webkit-linear-gradient(top, #fafbfc 0%, #eff3f6 90%);
background-image: linear-gradient(-180deg, #fafbfc 0%, #eff3f6 90%);
position: relative;
display: inline-block;
@@ -9445,6 +9337,8 @@ input:disabled {
.btn:hover, .btn:visited {
text-decoration: none;
background-color: #e6ebf1;
background-image: -webkit-linear-gradient(270deg, #f0f3f6 0%, #e6ebf1 90%);
background-image: -webkit-linear-gradient(top, #f0f3f6 0%, #e6ebf1 90%);
background-image: linear-gradient(-180deg, #f0f3f6 0%, #e6ebf1 90%);
background-position: 0 -0.5em;
background-repeat: repeat-x;
@@ -9459,17 +9353,22 @@ input:disabled {
}
.btn:disabled {
background-image: -webkit-linear-gradient(top, #63b175 0%, #61986e 90%);
background-image: linear-gradient(-180deg, #63b175 0%, #61986e 90%);
}
.btn-primary {
color: #fff;
background-color: #28a745;
background-image: -webkit-linear-gradient(270deg, #34d058 0%, #28a745 90%);
background-image: -webkit-linear-gradient(top, #34d058 0%, #28a745 90%);
background-image: linear-gradient(-180deg, #34d058 0%, #28a745 90%);
}
.btn-primary:hover {
background-color: #269f42;
background-image: -webkit-linear-gradient(270deg, #2fcb53 0%, #269f42 90%);
background-image: -webkit-linear-gradient(top, #2fcb53 0%, #269f42 90%);
background-image: linear-gradient(-180deg, #2fcb53 0%, #269f42 90%);
background-position: 0 -0.5em;
border-color: rgba(27, 31, 35, 0.5);
File diff suppressed because one or more lines are too long
Binary file not shown.

After

Width:  |  Height:  |  Size: 6.9 KiB

+2 -2
View File
File diff suppressed because one or more lines are too long
+1 -1
View File
@@ -123,7 +123,7 @@ eval("/* (ignored) *///# sourceMappingURL=data:application/json;charset=utf-8;ba
/* 9 */
/***/ function(module, exports, __webpack_require__) {
eval("\n/**\n * First we will load all of this project's JavaScript dependencies which\n * include Vue and Vue Resource. This gives a great starting point for\n * building robust, powerful web applications using Vue and Laravel.\n */\n\n__webpack_require__(1);\n\n/**\n * Next, we will create a fresh Vue application instance and attach it to\n * the page. Then, you may begin adding components to this application\n * or customize the JavaScript scaffolding to fit your unique needs.\n */\n\n//Vue.component('example', require('./components/people/dashboard/kids.vue'));\n\nvar app = new Vue({\n el: '#app',\n\n data: {\n activities_description_show: false,\n reminders_frequency: 'once',\n accept_invite_user: false,\n },\n methods: {\n },\n});\n\n$(document).ready(function() {\n} );\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOS5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy9yZXNvdXJjZXMvYXNzZXRzL2pzL2FwcC5qcz84YjY3Il0sInNvdXJjZXNDb250ZW50IjpbIlxuLyoqXG4gKiBGaXJzdCB3ZSB3aWxsIGxvYWQgYWxsIG9mIHRoaXMgcHJvamVjdCdzIEphdmFTY3JpcHQgZGVwZW5kZW5jaWVzIHdoaWNoXG4gKiBpbmNsdWRlIFZ1ZSBhbmQgVnVlIFJlc291cmNlLiBUaGlzIGdpdmVzIGEgZ3JlYXQgc3RhcnRpbmcgcG9pbnQgZm9yXG4gKiBidWlsZGluZyByb2J1c3QsIHBvd2VyZnVsIHdlYiBhcHBsaWNhdGlvbnMgdXNpbmcgVnVlIGFuZCBMYXJhdmVsLlxuICovXG5cbnJlcXVpcmUoJy4vYm9vdHN0cmFwJyk7XG5cbi8qKlxuICogTmV4dCwgd2Ugd2lsbCBjcmVhdGUgYSBmcmVzaCBWdWUgYXBwbGljYXRpb24gaW5zdGFuY2UgYW5kIGF0dGFjaCBpdCB0b1xuICogdGhlIHBhZ2UuIFRoZW4sIHlvdSBtYXkgYmVnaW4gYWRkaW5nIGNvbXBvbmVudHMgdG8gdGhpcyBhcHBsaWNhdGlvblxuICogb3IgY3VzdG9taXplIHRoZSBKYXZhU2NyaXB0IHNjYWZmb2xkaW5nIHRvIGZpdCB5b3VyIHVuaXF1ZSBuZWVkcy5cbiAqL1xuXG4vL1Z1ZS5jb21wb25lbnQoJ2V4YW1wbGUnLCByZXF1aXJlKCcuL2NvbXBvbmVudHMvcGVvcGxlL2Rhc2hib2FyZC9raWRzLnZ1ZScpKTtcblxuY29uc3QgYXBwID0gbmV3IFZ1ZSh7XG4gICAgZWw6ICcjYXBwJyxcblxuICAgIGRhdGE6IHtcbiAgICAgIGFjdGl2aXRpZXNfZGVzY3JpcHRpb25fc2hvdzogZmFsc2UsXG4gICAgICByZW1pbmRlcnNfZnJlcXVlbmN5OiAnb25jZScsXG4gICAgICBhY2NlcHRfaW52aXRlX3VzZXI6IGZhbHNlLFxuICAgIH0sXG4gICAgbWV0aG9kczoge1xuICAgIH0sXG59KTtcblxuJChkb2N1bWVudCkucmVhZHkoZnVuY3Rpb24oKSB7XG59ICk7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gcmVzb3VyY2VzL2Fzc2V0cy9qcy9hcHAuanMiXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7O0FBT0E7QUFDQTs7Ozs7Ozs7O0FBU0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=");
eval("\n/**\n * First we will load all of this project's JavaScript dependencies which\n * include Vue and Vue Resource. This gives a great starting point for\n * building robust, powerful web applications using Vue and Laravel.\n */\n\n__webpack_require__(1);\n\n/**\n * Next, we will create a fresh Vue application instance and attach it to\n * the page. Then, you may begin adding components to this application\n * or customize the JavaScript scaffolding to fit your unique needs.\n */\n\n//Vue.component('example', require('./components/people/dashboard/kids.vue'));\n\nvar app = new Vue({\n el: '#app',\n\n data: {\n activities_description_show: false,\n reminders_frequency: 'once',\n accept_invite_user: false,\n },\n methods: {\n },\n});\n\n// jQuery-Tags-Input for the tags on the contact\n$(document).ready(function() {\n} );\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOS5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy9yZXNvdXJjZXMvYXNzZXRzL2pzL2FwcC5qcz84YjY3Il0sInNvdXJjZXNDb250ZW50IjpbIlxuLyoqXG4gKiBGaXJzdCB3ZSB3aWxsIGxvYWQgYWxsIG9mIHRoaXMgcHJvamVjdCdzIEphdmFTY3JpcHQgZGVwZW5kZW5jaWVzIHdoaWNoXG4gKiBpbmNsdWRlIFZ1ZSBhbmQgVnVlIFJlc291cmNlLiBUaGlzIGdpdmVzIGEgZ3JlYXQgc3RhcnRpbmcgcG9pbnQgZm9yXG4gKiBidWlsZGluZyByb2J1c3QsIHBvd2VyZnVsIHdlYiBhcHBsaWNhdGlvbnMgdXNpbmcgVnVlIGFuZCBMYXJhdmVsLlxuICovXG5cbnJlcXVpcmUoJy4vYm9vdHN0cmFwJyk7XG5cbi8qKlxuICogTmV4dCwgd2Ugd2lsbCBjcmVhdGUgYSBmcmVzaCBWdWUgYXBwbGljYXRpb24gaW5zdGFuY2UgYW5kIGF0dGFjaCBpdCB0b1xuICogdGhlIHBhZ2UuIFRoZW4sIHlvdSBtYXkgYmVnaW4gYWRkaW5nIGNvbXBvbmVudHMgdG8gdGhpcyBhcHBsaWNhdGlvblxuICogb3IgY3VzdG9taXplIHRoZSBKYXZhU2NyaXB0IHNjYWZmb2xkaW5nIHRvIGZpdCB5b3VyIHVuaXF1ZSBuZWVkcy5cbiAqL1xuXG4vL1Z1ZS5jb21wb25lbnQoJ2V4YW1wbGUnLCByZXF1aXJlKCcuL2NvbXBvbmVudHMvcGVvcGxlL2Rhc2hib2FyZC9raWRzLnZ1ZScpKTtcblxuY29uc3QgYXBwID0gbmV3IFZ1ZSh7XG4gICAgZWw6ICcjYXBwJyxcblxuICAgIGRhdGE6IHtcbiAgICAgIGFjdGl2aXRpZXNfZGVzY3JpcHRpb25fc2hvdzogZmFsc2UsXG4gICAgICByZW1pbmRlcnNfZnJlcXVlbmN5OiAnb25jZScsXG4gICAgICBhY2NlcHRfaW52aXRlX3VzZXI6IGZhbHNlLFxuICAgIH0sXG4gICAgbWV0aG9kczoge1xuICAgIH0sXG59KTtcblxuLy8galF1ZXJ5LVRhZ3MtSW5wdXQgZm9yIHRoZSB0YWdzIG9uIHRoZSBjb250YWN0XG4kKGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbigpIHtcbn0gKTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyByZXNvdXJjZXMvYXNzZXRzL2pzL2FwcC5qcyJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7QUFPQTtBQUNBOzs7Ozs7Ozs7QUFTQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=");
/***/ }
/******/ ]);
+390
View File
@@ -0,0 +1,390 @@
/*
jQuery Tags Input Plugin 1.3.3
Copyright (c) 2011 XOXCO, Inc
Documentation for this plugin lives here:
http://xoxco.com/clickable/jquery-tags-input
Licensed under the MIT license:
http://www.opensource.org/licenses/mit-license.php
ben@xoxco.com
*/
(function($) {
var delimiter = new Array();
var tags_callbacks = new Array();
$.fn.doAutosize = function(o){
var minWidth = $(this).data('minwidth'),
maxWidth = $(this).data('maxwidth'),
val = '',
input = $(this),
testSubject = $('#'+$(this).data('tester_id'));
if (val === (val = input.val())) {return;}
// Enter new content into testSubject
var escaped = val.replace(/&/g, '&amp;').replace(/\s/g,' ').replace(/</g, '&lt;').replace(/>/g, '&gt;');
testSubject.html(escaped);
// Calculate new width + whether to change
var testerWidth = testSubject.width(),
newWidth = (testerWidth + o.comfortZone) >= minWidth ? testerWidth + o.comfortZone : minWidth,
currentWidth = input.width(),
isValidWidthChange = (newWidth < currentWidth && newWidth >= minWidth)
|| (newWidth > minWidth && newWidth < maxWidth);
// Animate width
if (isValidWidthChange) {
input.width(newWidth);
}
};
$.fn.resetAutosize = function(options){
// alert(JSON.stringify(options));
var minWidth = $(this).data('minwidth') || options.minInputWidth || $(this).width(),
maxWidth = $(this).data('maxwidth') || options.maxInputWidth || ($(this).closest('.tagsinput').width() - options.inputPadding),
val = '',
input = $(this),
testSubject = $('<tester/>').css({
position: 'absolute',
top: -9999,
left: -9999,
width: 'auto',
fontSize: input.css('fontSize'),
fontFamily: input.css('fontFamily'),
fontWeight: input.css('fontWeight'),
letterSpacing: input.css('letterSpacing'),
whiteSpace: 'nowrap'
}),
testerId = $(this).attr('id')+'_autosize_tester';
if(! $('#'+testerId).length > 0){
testSubject.attr('id', testerId);
testSubject.appendTo('body');
}
input.data('minwidth', minWidth);
input.data('maxwidth', maxWidth);
input.data('tester_id', testerId);
input.css('width', minWidth);
};
$.fn.addTag = function(value,options) {
options = jQuery.extend({focus:false,callback:true},options);
this.each(function() {
var id = $(this).attr('id');
var tagslist = $(this).val().split(delimiter[id]);
if (tagslist[0] == '') {
tagslist = new Array();
}
value = jQuery.trim(value);
if (options.unique) {
var skipTag = $(this).tagExist(value);
if(skipTag == true) {
//Marks fake input as not_valid to let styling it
$('#'+id+'_tag').addClass('not_valid');
}
} else {
var skipTag = false;
}
if (value !='' && skipTag != true) {
$('<span>').addClass('tag').append(
$('<span>').text(value).append('&nbsp;&nbsp;'),
$('<a>', {
href : '#',
title : 'Removing tag',
text : 'x'
}).click(function () {
return $('#' + id).removeTag(escape(value));
})
).insertBefore('#' + id + '_addTag');
tagslist.push(value);
$('#'+id+'_tag').val('');
if (options.focus) {
$('#'+id+'_tag').focus();
} else {
$('#'+id+'_tag').blur();
}
$.fn.tagsInput.updateTagsField(this,tagslist);
if (options.callback && tags_callbacks[id] && tags_callbacks[id]['onAddTag']) {
var f = tags_callbacks[id]['onAddTag'];
f.call(this, value);
}
if(tags_callbacks[id] && tags_callbacks[id]['onChange'])
{
var i = tagslist.length;
var f = tags_callbacks[id]['onChange'];
f.call(this, $(this), tagslist[i-1]);
}
}
});
return false;
};
$.fn.removeTag = function(value) {
value = unescape(value);
this.each(function() {
var id = $(this).attr('id');
var old = $(this).val().split(delimiter[id]);
$('#'+id+'_tagsinput .tag').remove();
str = '';
for (i=0; i< old.length; i++) {
if (old[i]!=value) {
str = str + delimiter[id] +old[i];
}
}
$.fn.tagsInput.importTags(this,str);
if (tags_callbacks[id] && tags_callbacks[id]['onRemoveTag']) {
var f = tags_callbacks[id]['onRemoveTag'];
f.call(this, value);
}
});
return false;
};
$.fn.tagExist = function(val) {
var id = $(this).attr('id');
var tagslist = $(this).val().split(delimiter[id]);
return (jQuery.inArray(val, tagslist) >= 0); //true when tag exists, false when not
};
// clear all existing tags and import new ones from a string
$.fn.importTags = function(str) {
var id = $(this).attr('id');
$('#'+id+'_tagsinput .tag').remove();
$.fn.tagsInput.importTags(this,str);
}
$.fn.tagsInput = function(options) {
var settings = jQuery.extend({
interactive:true,
defaultText:'add a tag',
minChars:0,
width:'300px',
height:'100px',
autocomplete: {selectFirst: false },
hide:true,
delimiter: ',',
unique:true,
removeWithBackspace:true,
placeholderColor:'#666666',
autosize: true,
comfortZone: 20,
inputPadding: 6*2
},options);
var uniqueIdCounter = 0;
this.each(function() {
// If we have already initialized the field, do not do it again
if (typeof $(this).attr('data-tagsinput-init') !== 'undefined') {
return;
}
// Mark the field as having been initialized
$(this).attr('data-tagsinput-init', true);
if (settings.hide) {
$(this).hide();
}
var id = $(this).attr('id');
if (!id || delimiter[$(this).attr('id')]) {
id = $(this).attr('id', 'tags' + new Date().getTime() + (uniqueIdCounter++)).attr('id');
}
var data = jQuery.extend({
pid:id,
real_input: '#'+id,
holder: '#'+id+'_tagsinput',
input_wrapper: '#'+id+'_addTag',
fake_input: '#'+id+'_tag'
},settings);
delimiter[id] = data.delimiter;
if (settings.onAddTag || settings.onRemoveTag || settings.onChange) {
tags_callbacks[id] = new Array();
tags_callbacks[id]['onAddTag'] = settings.onAddTag;
tags_callbacks[id]['onRemoveTag'] = settings.onRemoveTag;
tags_callbacks[id]['onChange'] = settings.onChange;
}
var markup = '<div id="'+id+'_tagsinput" class="tagsinput"><div id="'+id+'_addTag">';
if (settings.interactive) {
markup = markup + '<input id="'+id+'_tag" value="" data-default="'+settings.defaultText+'" />';
}
markup = markup + '</div><div class="tags_clear"></div></div>';
$(markup).insertAfter(this);
$(data.holder).css('width',settings.width);
$(data.holder).css('min-height',settings.height);
$(data.holder).css('height',settings.height);
if ($(data.real_input).val()!='') {
$.fn.tagsInput.importTags($(data.real_input),$(data.real_input).val());
}
if (settings.interactive) {
$(data.fake_input).val($(data.fake_input).attr('data-default'));
$(data.fake_input).css('color',settings.placeholderColor);
$(data.fake_input).resetAutosize(settings);
$(data.holder).bind('click',data,function(event) {
$(event.data.fake_input).focus();
});
$(data.fake_input).bind('focus',data,function(event) {
if ($(event.data.fake_input).val()==$(event.data.fake_input).attr('data-default')) {
$(event.data.fake_input).val('');
}
$(event.data.fake_input).css('color','#000000');
});
if (settings.autocomplete_url != undefined) {
autocomplete_options = {source: settings.autocomplete_url};
for (attrname in settings.autocomplete) {
autocomplete_options[attrname] = settings.autocomplete[attrname];
}
if (jQuery.Autocompleter !== undefined) {
$(data.fake_input).autocomplete(settings.autocomplete_url, settings.autocomplete);
$(data.fake_input).bind('result',data,function(event,data,formatted) {
if (data) {
$('#'+id).addTag(data[0] + "",{focus:true,unique:(settings.unique)});
}
});
} else if (jQuery.ui.autocomplete !== undefined) {
$(data.fake_input).autocomplete(autocomplete_options);
$(data.fake_input).bind('autocompleteselect',data,function(event,ui) {
$(event.data.real_input).addTag(ui.item.value,{focus:true,unique:(settings.unique)});
return false;
});
}
} else {
// if a user tabs out of the field, create a new tag
// this is only available if autocomplete is not used.
$(data.fake_input).bind('blur',data,function(event) {
var d = $(this).attr('data-default');
if ($(event.data.fake_input).val()!='' && $(event.data.fake_input).val()!=d) {
if( (event.data.minChars <= $(event.data.fake_input).val().length) && (!event.data.maxChars || (event.data.maxChars >= $(event.data.fake_input).val().length)) )
$(event.data.real_input).addTag($(event.data.fake_input).val(),{focus:true,unique:(settings.unique)});
} else {
$(event.data.fake_input).val($(event.data.fake_input).attr('data-default'));
$(event.data.fake_input).css('color',settings.placeholderColor);
}
return false;
});
}
// if user types a default delimiter like comma,semicolon and then create a new tag
$(data.fake_input).bind('keypress',data,function(event) {
if (_checkDelimiter(event)) {
event.preventDefault();
if( (event.data.minChars <= $(event.data.fake_input).val().length) && (!event.data.maxChars || (event.data.maxChars >= $(event.data.fake_input).val().length)) )
$(event.data.real_input).addTag($(event.data.fake_input).val(),{focus:true,unique:(settings.unique)});
$(event.data.fake_input).resetAutosize(settings);
return false;
} else if (event.data.autosize) {
$(event.data.fake_input).doAutosize(settings);
}
});
//Delete last tag on backspace
data.removeWithBackspace && $(data.fake_input).bind('keydown', function(event)
{
if(event.keyCode == 8 && $(this).val() == '')
{
event.preventDefault();
var last_tag = $(this).closest('.tagsinput').find('.tag:last').text();
var id = $(this).attr('id').replace(/_tag$/, '');
last_tag = last_tag.replace(/[\s]+x$/, '');
$('#' + id).removeTag(escape(last_tag));
$(this).trigger('focus');
}
});
$(data.fake_input).blur();
//Removes the not_valid class when user changes the value of the fake input
if(data.unique) {
$(data.fake_input).keydown(function(event){
if(event.keyCode == 8 || String.fromCharCode(event.which).match(/\w+|[áéíóúÁÉÍÓÚñÑ,/]+/)) {
$(this).removeClass('not_valid');
}
});
}
} // if settings.interactive
});
return this;
};
$.fn.tagsInput.updateTagsField = function(obj,tagslist) {
var id = $(obj).attr('id');
$(obj).val(tagslist.join(delimiter[id]));
};
$.fn.tagsInput.importTags = function(obj,val) {
$(obj).val('');
var id = $(obj).attr('id');
var tags = val.split(delimiter[id]);
for (i=0; i<tags.length; i++) {
$(obj).addTag(tags[i],{focus:false,callback:false});
}
if(tags_callbacks[id] && tags_callbacks[id]['onChange'])
{
var f = tags_callbacks[id]['onChange'];
f.call(obj, obj, tags[i]);
}
};
/**
* check delimiter Array
* @param event
* @returns {boolean}
* @private
*/
var _checkDelimiter = function(event){
var found = false;
if (event.which == 13) {
return true;
}
if (typeof event.data.delimiter === 'string') {
if (event.which == event.data.delimiter.charCodeAt(0)) {
found = true;
}
} else {
$.each(event.data.delimiter, function(index, delimiter) {
if (event.which == delimiter.charCodeAt(0)) {
found = true;
}
});
}
return found;
}
})(jQuery);
+61
View File
@@ -0,0 +1,61 @@
// Code to manage tags in the contact view
$('#tags').tagsInput({
'maxChars' : 255,
});
$('#tagsForm').hide();
$('#tagsFormCancel').click( function(e) {
$('#tagsForm').hide();
$('.tags').toggle();
});
$('#showTagForm').click(function(e) {
$('#tagsForm').toggle();
$('.tags').toggle();
e.preventDefault();
return false;
});
$('#tags_tagsinput').keyup(function(e) {
if (e.keyCode == 27) {
$('#tagsForm').toggle();
$('.tags').toggle();
}
});
$('#tagsForm').submit(function(e) {
// gather the list of tags in the input and translating it into a comma
// separated string
var tags = $.map(
$('#tagsForm .tag span'), function(e,i) {
return $(e).text().trim();
});
var tagsTring = tags.join(',');
$.post(
$( this ).prop( 'action' ),
{
"_token": $(this).find( 'input[name=_token]' ).val(),
'tags': tagsTring
},
function( data ) {
// success
$('#tagsForm').toggle();
$('.tags-list').empty();
// add the new tag
for (var i = 0; i < data['tags'].length ; i++) {
$('.tags-list').append('<li class="pretty-tag"><a href="/people?tags=' + data.tags[i].slug + '">' + data.tags[i].slug + '</a></li>');
}
$('.tags').toggle();
},
'json'
);
e.preventDefault();
});
+1
View File
@@ -27,5 +27,6 @@ const app = new Vue({
},
});
// jQuery-Tags-Input for the tags on the contact
$(document).ready(function() {
} );
+61
View File
@@ -0,0 +1,61 @@
// Code to manage tags in the contact view
$('#tags').tagsInput({
'maxChars' : 255,
});
$('#tagsForm').hide();
$('#tagsFormCancel').click( function(e) {
$('#tagsForm').hide();
$('.tags').toggle();
});
$('#showTagForm').click(function(e) {
$('#tagsForm').toggle();
$('.tags').toggle();
e.preventDefault();
return false;
});
$('#tags_tagsinput').keyup(function(e) {
if (e.keyCode == 27) {
$('#tagsForm').toggle();
$('.tags').toggle();
}
});
$('#tagsForm').submit(function(e) {
// gather the list of tags in the input and translating it into a comma
// separated string
var tags = $.map(
$('#tagsForm .tag span'), function(e,i) {
return $(e).text().trim();
});
var tagsTring = tags.join(',');
$.post(
$( this ).prop( 'action' ),
{
"_token": $(this).find( 'input[name=_token]' ).val(),
'tags': tagsTring
},
function( data ) {
// success
$('#tagsForm').toggle();
$('.tags-list').empty();
// add the new tag
for (var i = 0; i < data['tags'].length ; i++) {
$('.tags-list').append('<li class="pretty-tag"><a href="/people?tags=' + data.tags[i].slug + '">' + data.tags[i].slug + '</a></li>');
}
$('.tags').toggle();
},
'json'
);
e.preventDefault();
});
File diff suppressed because one or more lines are too long
+390
View File
@@ -0,0 +1,390 @@
/*
jQuery Tags Input Plugin 1.3.3
Copyright (c) 2011 XOXCO, Inc
Documentation for this plugin lives here:
http://xoxco.com/clickable/jquery-tags-input
Licensed under the MIT license:
http://www.opensource.org/licenses/mit-license.php
ben@xoxco.com
*/
(function($) {
var delimiter = new Array();
var tags_callbacks = new Array();
$.fn.doAutosize = function(o){
var minWidth = $(this).data('minwidth'),
maxWidth = $(this).data('maxwidth'),
val = '',
input = $(this),
testSubject = $('#'+$(this).data('tester_id'));
if (val === (val = input.val())) {return;}
// Enter new content into testSubject
var escaped = val.replace(/&/g, '&amp;').replace(/\s/g,' ').replace(/</g, '&lt;').replace(/>/g, '&gt;');
testSubject.html(escaped);
// Calculate new width + whether to change
var testerWidth = testSubject.width(),
newWidth = (testerWidth + o.comfortZone) >= minWidth ? testerWidth + o.comfortZone : minWidth,
currentWidth = input.width(),
isValidWidthChange = (newWidth < currentWidth && newWidth >= minWidth)
|| (newWidth > minWidth && newWidth < maxWidth);
// Animate width
if (isValidWidthChange) {
input.width(newWidth);
}
};
$.fn.resetAutosize = function(options){
// alert(JSON.stringify(options));
var minWidth = $(this).data('minwidth') || options.minInputWidth || $(this).width(),
maxWidth = $(this).data('maxwidth') || options.maxInputWidth || ($(this).closest('.tagsinput').width() - options.inputPadding),
val = '',
input = $(this),
testSubject = $('<tester/>').css({
position: 'absolute',
top: -9999,
left: -9999,
width: 'auto',
fontSize: input.css('fontSize'),
fontFamily: input.css('fontFamily'),
fontWeight: input.css('fontWeight'),
letterSpacing: input.css('letterSpacing'),
whiteSpace: 'nowrap'
}),
testerId = $(this).attr('id')+'_autosize_tester';
if(! $('#'+testerId).length > 0){
testSubject.attr('id', testerId);
testSubject.appendTo('body');
}
input.data('minwidth', minWidth);
input.data('maxwidth', maxWidth);
input.data('tester_id', testerId);
input.css('width', minWidth);
};
$.fn.addTag = function(value,options) {
options = jQuery.extend({focus:false,callback:true},options);
this.each(function() {
var id = $(this).attr('id');
var tagslist = $(this).val().split(delimiter[id]);
if (tagslist[0] == '') {
tagslist = new Array();
}
value = jQuery.trim(value);
if (options.unique) {
var skipTag = $(this).tagExist(value);
if(skipTag == true) {
//Marks fake input as not_valid to let styling it
$('#'+id+'_tag').addClass('not_valid');
}
} else {
var skipTag = false;
}
if (value !='' && skipTag != true) {
$('<span>').addClass('tag').append(
$('<span>').text(value).append('&nbsp;&nbsp;'),
$('<a>', {
href : '#',
title : 'Removing tag',
text : 'x'
}).click(function () {
return $('#' + id).removeTag(escape(value));
})
).insertBefore('#' + id + '_addTag');
tagslist.push(value);
$('#'+id+'_tag').val('');
if (options.focus) {
$('#'+id+'_tag').focus();
} else {
$('#'+id+'_tag').blur();
}
$.fn.tagsInput.updateTagsField(this,tagslist);
if (options.callback && tags_callbacks[id] && tags_callbacks[id]['onAddTag']) {
var f = tags_callbacks[id]['onAddTag'];
f.call(this, value);
}
if(tags_callbacks[id] && tags_callbacks[id]['onChange'])
{
var i = tagslist.length;
var f = tags_callbacks[id]['onChange'];
f.call(this, $(this), tagslist[i-1]);
}
}
});
return false;
};
$.fn.removeTag = function(value) {
value = unescape(value);
this.each(function() {
var id = $(this).attr('id');
var old = $(this).val().split(delimiter[id]);
$('#'+id+'_tagsinput .tag').remove();
str = '';
for (i=0; i< old.length; i++) {
if (old[i]!=value) {
str = str + delimiter[id] +old[i];
}
}
$.fn.tagsInput.importTags(this,str);
if (tags_callbacks[id] && tags_callbacks[id]['onRemoveTag']) {
var f = tags_callbacks[id]['onRemoveTag'];
f.call(this, value);
}
});
return false;
};
$.fn.tagExist = function(val) {
var id = $(this).attr('id');
var tagslist = $(this).val().split(delimiter[id]);
return (jQuery.inArray(val, tagslist) >= 0); //true when tag exists, false when not
};
// clear all existing tags and import new ones from a string
$.fn.importTags = function(str) {
var id = $(this).attr('id');
$('#'+id+'_tagsinput .tag').remove();
$.fn.tagsInput.importTags(this,str);
}
$.fn.tagsInput = function(options) {
var settings = jQuery.extend({
interactive:true,
defaultText:'add a tag',
minChars:0,
width:'300px',
height:'100px',
autocomplete: {selectFirst: false },
hide:true,
delimiter: ',',
unique:true,
removeWithBackspace:true,
placeholderColor:'#666666',
autosize: true,
comfortZone: 20,
inputPadding: 6*2
},options);
var uniqueIdCounter = 0;
this.each(function() {
// If we have already initialized the field, do not do it again
if (typeof $(this).attr('data-tagsinput-init') !== 'undefined') {
return;
}
// Mark the field as having been initialized
$(this).attr('data-tagsinput-init', true);
if (settings.hide) {
$(this).hide();
}
var id = $(this).attr('id');
if (!id || delimiter[$(this).attr('id')]) {
id = $(this).attr('id', 'tags' + new Date().getTime() + (uniqueIdCounter++)).attr('id');
}
var data = jQuery.extend({
pid:id,
real_input: '#'+id,
holder: '#'+id+'_tagsinput',
input_wrapper: '#'+id+'_addTag',
fake_input: '#'+id+'_tag'
},settings);
delimiter[id] = data.delimiter;
if (settings.onAddTag || settings.onRemoveTag || settings.onChange) {
tags_callbacks[id] = new Array();
tags_callbacks[id]['onAddTag'] = settings.onAddTag;
tags_callbacks[id]['onRemoveTag'] = settings.onRemoveTag;
tags_callbacks[id]['onChange'] = settings.onChange;
}
var markup = '<div id="'+id+'_tagsinput" class="tagsinput"><div id="'+id+'_addTag">';
if (settings.interactive) {
markup = markup + '<input id="'+id+'_tag" value="" data-default="'+settings.defaultText+'" />';
}
markup = markup + '</div><div class="tags_clear"></div></div>';
$(markup).insertAfter(this);
$(data.holder).css('width',settings.width);
$(data.holder).css('min-height',settings.height);
$(data.holder).css('height',settings.height);
if ($(data.real_input).val()!='') {
$.fn.tagsInput.importTags($(data.real_input),$(data.real_input).val());
}
if (settings.interactive) {
$(data.fake_input).val($(data.fake_input).attr('data-default'));
$(data.fake_input).css('color',settings.placeholderColor);
$(data.fake_input).resetAutosize(settings);
$(data.holder).bind('click',data,function(event) {
$(event.data.fake_input).focus();
});
$(data.fake_input).bind('focus',data,function(event) {
if ($(event.data.fake_input).val()==$(event.data.fake_input).attr('data-default')) {
$(event.data.fake_input).val('');
}
$(event.data.fake_input).css('color','#000000');
});
if (settings.autocomplete_url != undefined) {
autocomplete_options = {source: settings.autocomplete_url};
for (attrname in settings.autocomplete) {
autocomplete_options[attrname] = settings.autocomplete[attrname];
}
if (jQuery.Autocompleter !== undefined) {
$(data.fake_input).autocomplete(settings.autocomplete_url, settings.autocomplete);
$(data.fake_input).bind('result',data,function(event,data,formatted) {
if (data) {
$('#'+id).addTag(data[0] + "",{focus:true,unique:(settings.unique)});
}
});
} else if (jQuery.ui.autocomplete !== undefined) {
$(data.fake_input).autocomplete(autocomplete_options);
$(data.fake_input).bind('autocompleteselect',data,function(event,ui) {
$(event.data.real_input).addTag(ui.item.value,{focus:true,unique:(settings.unique)});
return false;
});
}
} else {
// if a user tabs out of the field, create a new tag
// this is only available if autocomplete is not used.
$(data.fake_input).bind('blur',data,function(event) {
var d = $(this).attr('data-default');
if ($(event.data.fake_input).val()!='' && $(event.data.fake_input).val()!=d) {
if( (event.data.minChars <= $(event.data.fake_input).val().length) && (!event.data.maxChars || (event.data.maxChars >= $(event.data.fake_input).val().length)) )
$(event.data.real_input).addTag($(event.data.fake_input).val(),{focus:true,unique:(settings.unique)});
} else {
$(event.data.fake_input).val($(event.data.fake_input).attr('data-default'));
$(event.data.fake_input).css('color',settings.placeholderColor);
}
return false;
});
}
// if user types a default delimiter like comma,semicolon and then create a new tag
$(data.fake_input).bind('keypress',data,function(event) {
if (_checkDelimiter(event)) {
event.preventDefault();
if( (event.data.minChars <= $(event.data.fake_input).val().length) && (!event.data.maxChars || (event.data.maxChars >= $(event.data.fake_input).val().length)) )
$(event.data.real_input).addTag($(event.data.fake_input).val(),{focus:true,unique:(settings.unique)});
$(event.data.fake_input).resetAutosize(settings);
return false;
} else if (event.data.autosize) {
$(event.data.fake_input).doAutosize(settings);
}
});
//Delete last tag on backspace
data.removeWithBackspace && $(data.fake_input).bind('keydown', function(event)
{
if(event.keyCode == 8 && $(this).val() == '')
{
event.preventDefault();
var last_tag = $(this).closest('.tagsinput').find('.tag:last').text();
var id = $(this).attr('id').replace(/_tag$/, '');
last_tag = last_tag.replace(/[\s]+x$/, '');
$('#' + id).removeTag(escape(last_tag));
$(this).trigger('focus');
}
});
$(data.fake_input).blur();
//Removes the not_valid class when user changes the value of the fake input
if(data.unique) {
$(data.fake_input).keydown(function(event){
if(event.keyCode == 8 || String.fromCharCode(event.which).match(/\w+|[áéíóúÁÉÍÓÚñÑ,/]+/)) {
$(this).removeClass('not_valid');
}
});
}
} // if settings.interactive
});
return this;
};
$.fn.tagsInput.updateTagsField = function(obj,tagslist) {
var id = $(obj).attr('id');
$(obj).val(tagslist.join(delimiter[id]));
};
$.fn.tagsInput.importTags = function(obj,val) {
$(obj).val('');
var id = $(obj).attr('id');
var tags = val.split(delimiter[id]);
for (i=0; i<tags.length; i++) {
$(obj).addTag(tags[i],{focus:false,callback:false});
}
if(tags_callbacks[id] && tags_callbacks[id]['onChange'])
{
var f = tags_callbacks[id]['onChange'];
f.call(obj, obj, tags[i]);
}
};
/**
* check delimiter Array
* @param event
* @returns {boolean}
* @private
*/
var _checkDelimiter = function(event){
var found = false;
if (event.which == 13) {
return true;
}
if (typeof event.data.delimiter === 'string') {
if (event.which == event.data.delimiter.charCodeAt(0)) {
found = true;
}
} else {
$.each(event.data.delimiter, function(index, delimiter) {
if (event.which == delimiter.charCodeAt(0)) {
found = true;
}
});
}
return found;
}
})(jQuery);
+47 -2
View File
@@ -1,8 +1,8 @@
@import "_custom_bootstrap";
@import "../../vendor/hint.css/hint.min";
// Basecamp style editor
@import "../../vendor/trix/dist/trix";
// Tags for a contact
@import "../../vendor/jquery.tagsinput/dist/jquery.tagsinput.min";
// For the datatables
@import "_datatable.min";
@@ -72,6 +72,51 @@ $border-color: #dfdfdf;
background-color: #d9534f;
}
.pretty-tag {
background: #eee;
border-radius: 3px;
color: #555;
display: inline-block;
font-size: 11px;
height: 22px;
line-height: 22px;
padding: 0 10px 0 19px;
position: relative;
margin: 0 10px 0 0;
text-decoration: none;
-webkit-transition: color 0.2s;
&::before {
background: #fff;
border-radius: 10px;
box-shadow: inset 0 1px rgba(0, 0, 0, 0.25);
content: '';
height: 6px;
left: 7px;
position: absolute;
width: 6px;
top: 9px;
}
&:hover {
background-color: #0366d6;
a {
color: #fff;
}
}
a {
text-decoration: none;
color: #555;
&:hover {
background-color: transparent;
color: #fff;
}
}
}
// Generic styles
body {
color: #323b43;
+91 -17
View File
@@ -7,14 +7,6 @@
margin-top: 20px;
}
#search-list {
.search {
margin-bottom: 20px;
padding: 15px;
width: 100%;
}
}
.sidebar {
.sidebar-cta {
margin-bottom: 20px;
@@ -34,6 +26,10 @@
left: 0;
position: absolute;
}
.number-contacts-per-tag {
float: right;
}
}
}
@@ -42,6 +38,18 @@
border-radius: 3px;
}
.clear-filter {
border: 1px solid #eee;
position: relative;
padding: 6px;
border-radius: 3px;
a {
position: absolute;
right: 10px;
}
}
.people-list-item {
border-bottom: 1px solid #eee;
padding: 10px;
@@ -125,15 +133,6 @@
color: #333;
}
}
.people-list-item-name {
display: inline-block;
margin-right: -9999px;
white-space: nowrap;
text-overflow: ellipsis;
width: calc(100% - 198px);
overflow: hidden;
vertical-align: middle;
}
.people-list-item-information {
color: #999;
@@ -141,6 +140,10 @@
float: right;
text-align: right;
position: relative;
span {
display: block;
}
}
.people-list-item-information span {
@@ -179,6 +182,7 @@
background-color: #f9f9fb;
border-bottom: 1px solid #eee;
position: relative;
padding-bottom: 20px;
.people-profile-information {
margin-bottom: 10px;
@@ -227,6 +231,7 @@
.profile-detail-summary {
padding-left: 100px;
margin-top: 3px;
li {
&:not(:last-child) {
@@ -241,6 +246,39 @@
}
}
}
#tagsForm {
padding-left: 100px;
position: relative;
#tags_tagsinput {
height: 40px!important;
min-height: 40px!important;
width: 370px!important;
display: inline-block;
overflow: hidden;
}
.tagsFormActions {
display: inline;
position: relative;
top: -17px;
}
}
.tags {
padding: 0;
padding-left: 100px;
list-style: none;
line-height: 20px;
margin: 0;
overflow: hidden;
margin-top: 8px;
li {
float: left;
}
}
}
.edit-information {
@@ -642,6 +680,12 @@
padding: 6px 0;
}
}
.people-list-item {
.people-list-item-information {
display: none;
}
}
}
.people-show {
@@ -651,12 +695,32 @@
margin-top: 10px;
h2 {
padding-left: 80px;
span {
display: none;
}
}
#tagsForm {
display: block;
margin-top: 40px;
padding-left: 0px;
#tags_tagsinput {
width: 100% !important;
}
.tagsFormActions {
display: block;
margin-top: 20px;
}
}
.profile-detail-summary {
padding-left: 0;
margin-top: 10px;
li {
display: block;
margin-right: 0;
@@ -669,6 +733,16 @@
}
}
}
.avatar {
height: 67px;
width: 67px;
padding-top: 11px;
}
.tags {
padding-left: 80px;
}
}
.edit-information {
+20
View File
@@ -18,11 +18,20 @@
&.selected {
background-color: #f7fbfc;
i {
color: green;
}
}
a {
width: 100%;
}
i {
margin-right: 5px;
color: #999;
}
}
}
@@ -258,4 +267,15 @@
}
}
}
.tags-list {
.tags-list-contact-number {
margin-left: 10px;
color: #999;
}
.actions {
text-align: right;
}
}
}
+1
View File
@@ -39,6 +39,7 @@ return [
'breadcrumb_settings_import' => 'Import',
'breadcrumb_settings_import_report' => 'Import report',
'breadcrumb_settings_import_upload' => 'Upload',
'breadcrumb_settings_tags' => 'Tags',
'gender_male' => 'Man',
'gender_female' => 'Woman',
+3
View File
@@ -24,6 +24,9 @@ return [
'event_create_gift' => 'added a gift',
'event_update_gift' => 'updated a gift',
'blank_title' => 'You don\'t have any activity yet.',
'blank_cta' => 'Add contact',
'tab_last_edited_contacts' => 'Last edited contacts',
'tab_whats_coming' => 'What\'s coming',
'tab_lastest_actions' => 'Latest actions',
+7 -1
View File
@@ -14,6 +14,9 @@ return [
'people_list_firstnameZA' => 'Sort by first name Z → A',
'people_list_lastnameAZ' => 'Sort by last name A → Z',
'people_list_lastnameZA' => 'Sort by last name Z → A',
'people_list_filter_tag' => 'Showing all the contacts tagged with <span class="pretty-tag">:name</span>',
'people_list_clear_filter' => 'Clear filter',
'people_list_contacts_per_tags' => '{0} 0 contact|{1,1} 1 contact|{2,*} :count contacts',
// people add
'people_add_title' => 'Add a new person',
@@ -284,5 +287,8 @@ return [
'debt_add_add_cta' => 'Add debt',
'debt_edit_update_cta' => 'Update debt',
'debt_edit_success' => 'The debt has been updated successfully',
'debts_blank_title' => 'Manage debts you owe to :name or :name owes you'
'debts_blank_title' => 'Manage debts you owe to :name or :name owes you',
// tags
'tag_edit' => 'Edit tag',
];
+13
View File
@@ -6,6 +6,7 @@ return [
'sidebar_settings_users' => 'Users',
'sidebar_settings_subscriptions' => 'Subscription',
'sidebar_settings_import' => 'Import data',
'sidebar_settings_tags' => 'Tags management',
'export_title' => 'Export your account data',
'export_be_patient' => 'Click the button to start the export. It might take several minutes to process the export - please be patient and do not spam the button.',
@@ -117,5 +118,17 @@ return [
'import_report_status_skipped' => 'Skipped',
'import_vcard_contact_exist' => 'Contact already exists',
'import_vcard_contact_no_firstname' => 'No firstname (mandatory)',
'import_blank_title' => 'You haven\'t imported any contacts yet.',
'import_blank_question' => 'Would you like to import contacts now?',
'import_blank_description' => 'We can import vCard files that you can get from Google Contacts or your Contact manager.',
'import_blank_cta' => 'Import vCard',
'tags_list_title' => 'Tags',
'tags_list_description' => 'You can organize your contacts by setting up tags. Tags work like folders, but you can add more than one tag to a contact. To add a new tag, add it on the contact itself.',
'tags_list_contact_number' => ':count contacts',
'tags_list_delete_success' => 'The tag has been successfully with success',
'tags_list_delete_confirmation' => 'Are you sure you want to delete the tag? No contacts will be deleted, only the tag.',
'tags_blank_title' => 'Tags are a great way of categorizing your contacts.',
'tags_blank_description' => 'Tags work like folders, but you can add more than one tag to a contact. Go to a contact and tag a friend, right below the name. Once a contact is tagged, go back here to manage all the tags in your account.',
];
+1
View File
@@ -39,6 +39,7 @@ return [
'breadcrumb_settings_import' => 'Import',
'breadcrumb_settings_import_report' => 'Import report',
'breadcrumb_settings_import_upload' => 'Upload',
'breadcrumb_settings_tags' => 'Tags',
'gender_male' => 'Homme',
'gender_female' => 'Femme',
+3
View File
@@ -24,6 +24,9 @@ return [
'event_create_gift' => 'added a gift',
'event_update_gift' => 'updated a gift',
'blank_title' => 'Vous n\'avez encore aucune activité.',
'blank_cta' => 'Ajoutez un contact',
'tab_last_edited_contacts' => 'Derniers contacts modifiés',
'tab_whats_coming' => 'Prochainement',
'tab_lastest_actions' => 'Dernières actions',
+7 -1
View File
@@ -14,6 +14,9 @@ return [
'people_list_firstnameZA' => 'Tri par prénom Z → A',
'people_list_lastnameAZ' => 'Tri par nom de famille A → Z',
'people_list_lastnameZA' => 'Tri par nom de famille Z → A',
'people_list_filter_tag' => 'Showing all the contacts tagged with <span class="pretty-tag">:name</span>',
'people_list_clear_filter' => 'Clear filter',
'people_list_contacts_per_tags' => '{0} 0 contact|{1,1} 1 contact|{2,*} :count contacts',
// people add
'people_add_title' => 'Ajouter une nouvelle personne',
@@ -284,6 +287,9 @@ return [
'debt_add_add_cta' => 'Ajouter la dette',
'debt_edit_update_cta' => 'Mettre à jour la dette',
'debt_edit_success' => 'La dette a été modifiée avec succès',
'debts_blank_title' => 'Gérez les dettes que vous devez à :name ou que :name vous doit'
'debts_blank_title' => 'Gérez les dettes que vous devez à :name ou que :name vous doit',
// tags
'tag_edit' => 'Edit tag',
];
+13
View File
@@ -6,6 +6,7 @@ return [
'sidebar_settings_users' => 'Utilisateurs',
'sidebar_settings_subscriptions' => 'Subscription',
'sidebar_settings_import' => 'Import data',
'sidebar_settings_tags' => 'Tags management',
'export_title' => 'Exporter les données de votre compte',
'export_be_patient' => 'Cliquez sur le bouton pour commencer l\'export. Cela peut prendre plusieurs minutes pour préparer l\'export - merci d\'être patient et de ne pas spammer le bouton.',
@@ -117,4 +118,16 @@ return [
'import_report_status_skipped' => 'Skipped',
'import_vcard_contact_exist' => 'Contact already exists',
'import_vcard_contact_no_firstname' => 'No firstname (mandatory)',
'import_blank_title' => 'You haven\'t imported any contacts yet.',
'import_blank_question' => 'Would you like to import contacts now?',
'import_blank_description' => 'We can import vCard files that you can get from Google Contacts or your Contact manager.',
'import_blank_cta' => 'Import vCard',
'tags_list_title' => 'Tags',
'tags_list_description' => 'You can organize your contacts by setting up tags. Tags work like folders, but you can add more than one tag to a contact.',
'tags_list_contact_number' => ':count contacts',
'tags_list_delete_success' => 'The tag has been successfully with success',
'tags_list_delete_confirmation' => 'Are you sure you want to delete the tag? No contacts will be deleted, only the tag.',
'tags_blank_title' => 'Tags are a great way of categorizing your contacts.',
'tags_blank_description' => 'Tags work like folders, but you can add more than one tag to a contact. Go to a contact and tag a friend, right below the name. Once a contact is tagged, go back here to manage all the tags in your account.',
];
+1
View File
@@ -39,6 +39,7 @@ return [
'breadcrumb_settings_import' => 'Import',
'breadcrumb_settings_import_report' => 'Import report',
'breadcrumb_settings_import_upload' => 'Upload',
'breadcrumb_settings_tags' => 'Tags',
'gender_male' => 'Homem',
'gender_female' => 'Mulher',
+3
View File
@@ -24,6 +24,9 @@ return [
'event_create_gift' => 'added a gift',
'event_update_gift' => 'updated a gift',
'blank_title' => 'Você ainda não possui nenhuma atividade.',
'blank_cta' => 'Adicionar contato',
'tab_last_edited_contacts' => 'Últimos contatos editados',
'tab_whats_coming' => 'O que está por vir',
'tab_lastest_actions' => 'Últimas ações',
+7 -1
View File
@@ -14,6 +14,9 @@ return [
'people_list_firstnameZA' => 'Classificar por primeiro nome Z → A',
'people_list_lastnameAZ' => 'Classificar por sobrenome A → Z',
'people_list_lastnameZA' => 'Classificar por sobrenome Z → A',
'people_list_filter_tag' => 'Showing all the contacts tagged with <span class="pretty-tag">:name</span>',
'people_list_clear_filter' => 'Clear filter',
'people_list_contacts_per_tags' => '{0} 0 contact|{1,1} 1 contact|{2,*} :count contacts',
// people add
'people_add_title' => 'Adicione uma nova pessoa',
@@ -284,5 +287,8 @@ return [
'debt_add_add_cta' => 'Adicionar dívida',
'debt_edit_update_cta' => 'Update debt',
'debt_edit_success' => 'The debt has been updated successfully',
'debts_blank_title' => 'Manage debts you owe to :name or :name owes you'
'debts_blank_title' => 'Manage debts you owe to :name or :name owes you',
// tags
'tag_edit' => 'Edit tag',
];
+13
View File
@@ -6,6 +6,7 @@ return [
'sidebar_settings_users' => 'Users',
'sidebar_settings_subscriptions' => 'Subscription',
'sidebar_settings_import' => 'Import data',
'sidebar_settings_tags' => 'Tags management',
'export_title' => 'Export your account data',
'export_be_patient' => 'Click the button to start the export. It might take several minutes to process the export - please be patient and do not spam the button.',
@@ -116,4 +117,16 @@ return [
'import_report_status_skipped' => 'Skipped',
'import_vcard_contact_exist' => 'Contact already exists',
'import_vcard_contact_no_firstname' => 'No firstname (mandatory)',
'import_blank_title' => 'You haven\'t imported any contacts yet.',
'import_blank_question' => 'Would you like to import contacts now?',
'import_blank_description' => 'We can import vCard files that you can get from Google Contacts or your Contact manager.',
'import_blank_cta' => 'Import vCard',
'tags_list_title' => 'Tags',
'tags_list_description' => 'You can organize your contacts by setting up tags. Tags work like folders, but you can add more than one tag to a contact.',
'tags_list_contact_number' => ':count contacts',
'tags_list_delete_success' => 'The tag has been successfully with success',
'tags_list_delete_confirmation' => 'Are you sure you want to delete the tag? No contacts will be deleted, only the tag.',
'tags_blank_title' => 'Tags are a great way of categorizing your contacts.',
'tags_blank_description' => 'Tags work like folders, but you can add more than one tag to a contact. Go to a contact and tag a friend, right below the name. Once a contact is tagged, go back here to manage all the tags in your account.',
];
+1
View File
@@ -39,6 +39,7 @@ return [
'breadcrumb_settings_import' => 'Import',
'breadcrumb_settings_import_report' => 'Import report',
'breadcrumb_settings_import_upload' => 'Upload',
'breadcrumb_settings_tags' => 'Tags',
'gender_male' => 'Мужской',
'gender_female' => 'Женский',
+3
View File
@@ -24,6 +24,9 @@ return [
'event_create_gift' => 'added a gift',
'event_update_gift' => 'updated a gift',
'blank_title' => 'У вас пока нет активностей.',
'blank_cta' => 'Добавить или изменить контакт',
'tab_last_edited_contacts' => 'Последние изменённые контакты',
'tab_whats_coming' => 'Что предстоит',
'tab_lastest_actions' => 'Последние действия',
+7 -1
View File
@@ -14,6 +14,9 @@ return [
'people_list_firstnameZA' => 'Сортировать по имени Я → А',
'people_list_lastnameAZ' => 'Сортировать по фамилии А → Я',
'people_list_lastnameZA' => 'Сортировать по фамилии Я → А',
'people_list_filter_tag' => 'Showing all the contacts tagged with <span class="pretty-tag">:name</span>',
'people_list_clear_filter' => 'Clear filter',
'people_list_contacts_per_tags' => '{0} 0 contact|{1,1} 1 contact|{2,*} :count contacts',
// people add
'people_add_title' => 'Добавить человека',
@@ -284,5 +287,8 @@ return [
'debt_add_add_cta' => 'Добавить долг',
'debt_edit_update_cta' => 'Update debt',
'debt_edit_success' => 'The debt has been updated successfully',
'debts_blank_title' => 'Manage debts you owe to :name or :name owes you'
'debts_blank_title' => 'Manage debts you owe to :name or :name owes you',
// tags
'tag_edit' => 'Edit tag',
];
+13
View File
@@ -6,6 +6,7 @@ return [
'sidebar_settings_users' => 'Users',
'sidebar_settings_subscriptions' => 'Subscription',
'sidebar_settings_import' => 'Import data',
'sidebar_settings_tags' => 'Tags management',
'export_title' => 'Export your account data',
'export_be_patient' => 'Click the button to start the export. It might take several minutes to process the export - please be patient and do not spam the button.',
@@ -115,4 +116,16 @@ return [
'import_report_status_skipped' => 'Skipped',
'import_vcard_contact_exist' => 'Contact already exists',
'import_vcard_contact_no_firstname' => 'No firstname (mandatory)',
'import_blank_title' => 'You haven\'t imported any contacts yet.',
'import_blank_question' => 'Would you like to import contacts now?',
'import_blank_description' => 'We can import vCard files that you can get from Google Contacts or your Contact manager.',
'import_blank_cta' => 'Import vCard',
'tags_list_title' => 'Tags',
'tags_list_description' => 'You can organize your contacts by setting up tags. Tags work like folders, but you can add more than one tag to a contact.',
'tags_list_contact_number' => ':count contacts',
'tags_list_delete_success' => 'The tag has been successfully with success',
'tags_list_delete_confirmation' => 'Are you sure you want to delete the tag? No contacts will be deleted, only the tag.',
'tags_blank_title' => 'Tags are a great way of categorizing your contacts.',
'tags_blank_description' => 'Tags work like folders, but you can add more than one tag to a contact. Go to a contact and tag a friend, right below the name. Once a contact is tagged, go back here to manage all the tags in your account.',
];
@@ -34,6 +34,10 @@
{{-- THE JS FILE OF THE APP --}}
<script src="{{ elixir('js/app.js') }}"></script>
{{-- SPECIFIC TO TAGS --}}
<script src="/js/jquery.tagsinput.js"></script>
<script src="/js/tags.js"></script>
{{-- TRACKING SHIT --}}
@if(config('app.env') != 'local' && !empty(config('monica.google_analytics_app_id')))
<script>
+18 -1
View File
@@ -29,8 +29,25 @@
{{ $contact->getCompleteName(auth()->user()->name_order) }}
</h2>
<ul class="tags">
<ul class="tags-list">
@foreach ($contact->tags as $tag)
<li class="pretty-tag"><a href="/people?tags={{ $tag->name_slug }}">{{ $tag->name }}</a></li>
@endforeach
</ul>
<li><a href="#" id="showTagForm">{{ trans('people.tag_edit') }}</a></li>
</ul>
<form method="POST" action="/people/{{ $contact->id }}/tags/update" id="tagsForm">
{{ csrf_field() }}
<input name="tags" id="tags" value="{{ $contact->getTagsAsString() }}" />
<div class="tagsFormActions">
<button type="submit" class="btn btn-primary">{{ trans('app.update') }}</button>
<a href="#" class="btn" id="tagsFormCancel">{{ trans('app.cancel') }}</a>
</div>
</form>
<ul class="horizontal profile-detail-summary">
{{-- Last activity information --}}
<li>
@if (is_null($contact->getLastActivityDate(Auth::user()->timezone)))
{{ trans('people.last_activity_date_empty') }}
+20 -2
View File
@@ -48,7 +48,14 @@
<div class="{{ auth()->user()->getFluidLayout() }}">
<div class="row">
<div class="col-xs-12 col-md-9" id="search-list">
<div class="col-xs-12 col-md-9">
@if (! is_null($tag))
<p class="clear-filter">
{!! trans('people.people_list_filter_tag', ['name' => $tag->name]) !!}
<a href="/people">{{ trans('people.people_list_clear_filter') }}</a>
</p>
@endif
<ul class="list">
@@ -107,7 +114,7 @@
</span>
<span class="people-list-item-information">
{{ trans_choice('people.people_list_number_kids', $contact->getNumberOfKids(), ['count' => $contact->getNumberOfKids()]) }} <br />
{{ trans_choice('people.people_list_number_kids', $contact->getNumberOfKids(), ['count' => $contact->getNumberOfKids()]) }}
<span>{{ trans('people.people_list_last_updated') }} {{ \App\Helpers\DateHelper::getShortDate($contact->updated_at) }}</span>
</span>
</a>
@@ -121,6 +128,17 @@
<a href="/people/add" class="btn btn-primary sidebar-cta">
{{ trans('people.people_list_blank_cta') }}
</a>
<ul>
@foreach (auth()->user()->account->tags as $tag)
@if ($tag->contacts()->count() > 0)
<li>
<span class="pretty-tag"><a href="/people?tags={{ $tag->name_slug }}">{{ $tag->name }}</a></span>
<span class="number-contacts-per-tag">{{ trans_choice('people.people_list_contacts_per_tags', $tag->contacts()->count(), ['count' => $tag->contacts()->count()]) }}</span>
</li>
@endif
@endforeach
</ul>
</div>
</div>
+1 -1
View File
@@ -3,7 +3,7 @@
@section('title', $contact->getCompleteName(auth()->user()->name_order) )
@section('content')
<div class="people-show">
<div class="people-show" data-contact-id="{{ $contact->id }}">
{{ csrf_field() }}
{{-- Breadcrumb --}}
@@ -3,40 +3,48 @@
@if (Route::currentRouteName() == 'settings.index')
<li class="selected">
<i class="fa fa-cog" aria-hidden="true"></i>
{{ trans('settings.sidebar_settings') }}
</li>
@else
<li>
<i class="fa fa-cog" aria-hidden="true"></i>
<a href="/settings">{{ trans('settings.sidebar_settings') }}</a>
</li>
@endif
@if (Route::currentRouteName() == 'settings.export')
<li class="selected">
<i class="fa fa-cloud-download" aria-hidden="true"></i>
{{ trans('settings.sidebar_settings_export') }}
</li>
@else
<li>
<i class="fa fa-cloud-download" aria-hidden="true"></i>
<a href="/settings/export">{{ trans('settings.sidebar_settings_export') }}</a>
</li>
@endif
@if (Route::currentRouteName() == 'settings.import')
<li class="selected">
<i class="fa fa-cloud-upload" aria-hidden="true"></i>
{{ trans('settings.sidebar_settings_import') }}
</li>
@else
<li>
<i class="fa fa-cloud-upload" aria-hidden="true"></i>
<a href="/settings/import">{{ trans('settings.sidebar_settings_import') }}</a>
</li>
@endif
@if (Route::currentRouteName() == 'settings.users')
<li class="selected">
<i class="fa fa-user-circle-o" aria-hidden="true"></i>
{{ trans('settings.sidebar_settings_users') }}
</li>
@else
<li>
<i class="fa fa-user-circle-o" aria-hidden="true"></i>
<a href="/settings/users">{{ trans('settings.sidebar_settings_users') }}</a>
</li>
@endif
@@ -44,13 +52,27 @@
@if (config('monica.requires_subscription'))
@if (Route::currentRouteName() == 'settings.subscriptions.index')
<li class="selected">
<i class="fa fa-money" aria-hidden="true"></i>
{{ trans('settings.sidebar_settings_subscriptions') }}
</li>
@else
<li>
<i class="fa fa-money" aria-hidden="true"></i>
<a href="/settings/subscriptions">{{ trans('settings.sidebar_settings_subscriptions') }}</a>
</li>
@endif
@endif
@if (Route::currentRouteName() == 'settings.tags')
<li class="selected">
<i class="fa fa-tags" aria-hidden="true"></i>
{{ trans('settings.sidebar_settings_tags') }}
</li>
@else
<li>
<i class="fa fa-tags" aria-hidden="true"></i>
<a href="/settings/tags">{{ trans('settings.sidebar_settings_tags') }}</a>
</li>
@endif
</ul>
</div>
@@ -34,13 +34,13 @@
<img src="/img/settings/imports/import.svg">
<h2>You haven't imported any contacts yet.</h2>
<h2>{{ trans('settings.import_blank_title') }}</h2>
<h3>Would you like to import contacts now?</h3>
<h3>{{ trans('settings.import_blank_question') }}</h3>
<p>We can import vCard files that you can get from Google Contacts or your Contact manager.</p>
<p>{{ trans('settings.import_blank_description') }}</p>
<p class="cta"><a href="/settings/import/upload" class="btn">Import vCard</a></p>
<p class="cta"><a href="/settings/import/upload" class="btn">{{ trans('settings.import_blank_cta') }}</a></p>
</div>
@@ -38,7 +38,7 @@
<ul class="report-summary">
<li>{{ trans('settings.import_report_date') }}: <span>{{ \App\Helpers\DateHelper::getShortDate($importJob->created_at) }}</span></li>
<li>{{ trans('settings.import_report_type') }}: <span>{{ $importJob->type }}</span></li>
<li>{{ trans('settings.Number of contacts in the file') }}: <span>{{ $importJob->contacts_found }}</span></li>
<li>{{ trans('settings.import_report_number_contacts') }}: <span>{{ $importJob->contacts_found }}</span></li>
<li>{{ trans('settings.import_report_number_contacts_imported') }}: <span>{{ $importJob->contacts_imported }}</span></li>
<li>{{ trans('settings.import_report_number_contacts_skipped') }}: <span>{{ $importJob->contacts_skipped }}</span></li>
</ul>
+84
View File
@@ -0,0 +1,84 @@
@extends('layouts.skeleton')
@section('content')
<div class="settings">
{{-- Breadcrumb --}}
<div class="breadcrumb">
<div class="{{ Auth::user()->getFluidLayout() }}">
<div class="row">
<div class="col-xs-12">
<ul class="horizontal">
<li>
<a href="/dashboard">{{ trans('app.breadcrumb_dashboard') }}</a>
</li>
<li>
<a href="/settings">{{ trans('app.breadcrumb_settings') }}</a>
</li>
<li>
{{ trans('app.breadcrumb_settings_tags') }}
</li>
</ul>
</div>
</div>
</div>
</div>
<div class="{{ Auth::user()->getFluidLayout() }}">
<div class="row">
@include('settings._sidebar')
<div class="col-xs-12 col-sm-9 tags-list">
@if (auth()->user()->account->tags->count() == 0)
<div class="col-xs-12 col-sm-9 blank-screen">
<img src="/img/settings/tags/tags.png">
<h2>{{ trans('settings.tags_blank_title') }}</h2>
<p>{{ trans('settings.tags_blank_description') }}</p>
</div>
@else
<h3 class="with-actions">
{{ trans('settings.tags_list_title') }}
</h3>
<p>{{ trans('settings.tags_list_description') }}</p>
@if (session('success'))
<div class="alert alert-success">
{{ session('success') }}
</div>
@endif
<ul class="table">
@foreach (auth()->user()->account->tags as $tag)
<li class="table-row" data-tag-id="{{ $tag->id }}">
<div class="table-cell">
{{ $tag->name }}
<span class="tags-list-contact-number">({{ trans('settings.tags_list_contact_number', ['count' => $tag->contacts()->count()]) }})</span>
</div>
<div class="table-cell actions">
<a href="/settings/tags/{{ $tag->id }}/delete" onclick="return confirm('{{ trans('settings.tags_list_delete_confirmation') }}')">
<i class="fa fa-trash-o" aria-hidden="true"></i>
</a>
</div>
</li>
@endforeach
</ul>
@endif
</div>
</div>
</div>
</div>
@endsection