Jump to content

Community Mod Repository and The Majiir Challenge


Majiir

Recommended Posts

The scrap of Spaceport is a detour inspired by the efforts of other community members to save aa archive of community content.

In terms of convincing people to work with me, if people are looking for recognition and warm fuzzy feelings of be nurtured and given assurances that work they put in will receive rewards and praise at a later date, you're speaking with the wrong guy. My worldview centers around the journey. The work is the reward. To me, it doesn't matter how my contribution is received by others. If the community wants to throw my efforts away I've already made peace with that prospect. I'm just having fun doing what I'm doing, kicking goals and enjoying the ballet of my code's dance with my microprocessor.

That's my worldview. Which should be pretty obvious by the way I interact with the community. I'll smash this website together and move on to my next challenge. I've got nothing against what you or anyone else wants and I've taken everyone's view into consideration. What I'm not all about is defining myself by how others feel about what I'm doing. If you or anyone else want to express an opinion, that's great.

In the mean time, I'll be looking more to what people are doing rather than what they are saying.

Link to comment
Share on other sites

I've saved all the stock craft files from Spaceport on my hard drive. Debating uploading them to ModDB after Spaceport goes down for good so at least there will be a repository there of what we have had on Spaceport.

Link to comment
Share on other sites

I'll smash this website together and move on to my next challenge.

Ok, so you are here until the opening and then bye bye ? But what I am doing, please keep posting. your message are a bright spot in my rainy days.

I've saved all the stock craft files from Spaceport on my hard drive. Debating uploading them to ModDB after Spaceport goes down for good so at least there will be a repository there of what we have had on Spaceport.

Please do, perfect place for them.

Link to comment
Share on other sites

So what can someone who knows no coding, or anything technical when it comes to webdesign, help out in this process? :) I would very much like to see this get off the ground! :)

How about you start with the website content. We need an about us page. Who are we, what is KSP, why does this site exists, etc.

We also need content for the interface like form text. Here's an example; When I sign up for the website, what is the welcome message? "Hi X, thanks for joining Replaceport. Here's how to use the site and things you should know about getting our stuff online..." It doesn't have to be perfect, just a start so we have something to eyeball. :wink:

It's hard to say how specific I should be because if I sit down and describe every job I could do it in less time. This is where people's initiative will help out a lot. I'm happy to nudge people in the right direction.

Ok, so you are here until the opening and then bye bye ? But what I am doing, please keep posting. your message are a bright spot in my rainy days.

I'll still be here and help out as I can but, new challenges are around the corner for me. Helpfully there will be enough people here who are interested in the project to keep it moving forward and participate like, you know, a community. :)

Link to comment
Share on other sites

If the community wants to throw my efforts away I've already made peace with that prospect. I'm just having fun doing what I'm doing, kicking goals and enjoying the ballet of my code's dance with my microprocessor.

I honestly don't know why people are giving you are a hard time O-Doc. I see nothing wrong with your approach and I think your project is one which has potential.

I say opinions be damned, keep up the good work.

So what can someone who knows no coding, or anything technical when it comes to webdesign, help out in this process? :)

This is mostly a technical project, so the core of the work will require programming knowledge. There is a small amount of copy writing to do for the website itself.

If you have any graphic design experience, artwork and UI elements could be helpful. Depending on the project. Some projects are going a pretty straightforward bootstrap design with not much in terms of graphics.

I myself would be interested in a few different graphical elements, but that can wait. Right now, I don't think my project will make the cut.

Link to comment
Share on other sites

I say opinions be damned, keep up the good work.

Thanks I appreciate it.

Look, there's plenty of fairly mundane jobs you need to do to get a website up. Anyone without web dev skills who sticks their hand up can contribute in a very meaningful way. One of the big things I need is a language file. Let me explain.

All the user interface elements on websites, read: decent websites, are controlled with a list of words and phrases. EG;

Downloads

Uploads

Recent

Login

Register

You get the point. We need someone to get all those together into a single text file, one word per line. This file can grow and get passed around the community so we have a complete language file for the interface. Then, this file can go to bi-lingual people who can translate it for us to be able to offer the pubic multi-language support. Nice. That's something anyone can do. If you need inspiration grab my wireframes.pdf doc in the documents downloads and start building a list.

EDIT: Or, someone can do all the Google Translate stuff. Requires no specific skill set.

Edited by O-Doc
Link to comment
Share on other sites

After I offered to start organizing some of the non-code logisitics that the site will need eventually, I started working on an outline of those sorts of things. I've started off with all of the documentation/writing that will need to be done. I appended a bit about the Language files for translation at the end there as well as stating the need for translations for all of the TOS/Privacy, rules and so on as well.

Can add this into the documentation pool somewhere where it will be easier to update if you like. It is certainly only a rough draft, so things can be cut or added as needed, and there are certainly more sections left to do beyond the documentation/writing process. Anyone else welcome to chime in, volunteer or discuss as needed. I don't think its super urgent yet because a lot of it will be tailored by who runs and owns the site, but its good to get started.

https://dl.dropboxusercontent.com/u/46506740/RepositoryDocuementOutlinev1.docx (Open/LibreOffice Doc/XML format with ease-of-reading formatting)

https://dl.dropboxusercontent.com/u/46506740/RepositoryDocuementOutlinev1.txt (plaintext for those of you who only have "old school" text reading capabilities)

Convert the file/format as needed.

Link to comment
Share on other sites

Sweet! That's very useful. I'm counting 5 top level documents by community members which will hopefully be mashed into one file. We have your two docs, my doc which is mostly gibberish and tech stuff, then there's RadGH's post and medavox's docs which he's put up online.

The thing I like about medavox's approach is that it is a working doc which is publicly viewable. For me the downside is he needs to give user access to his repo to make changes. Not bad considering the potential for abuse but, there should be a low barrier to entry for casual people to drop off some work and go on their merry way. There's potentially a lot of people who could get inspired and do 30min - 1hr work on it and that's all. Needing to make a commitment is a barrier to some, that's why the whole permission's thing is a bit off for me.

Here's my internal working doc which is just a whole bunch of random thoughts puked out onto a text file so I don't have to remember stuff while I'm coding. That's the way I work.


Interface elements

NAVIGATION ELEMENTS

Corporate Menu Top
Standard page top links appearing globally across the website
-Home: Link to homepage
-About: Link to about website page
-FAQ: Lnk to frequently asked question page
-Contact: Link to contact form and information
-Register: Link to regitration page
-Login: Button to display login form

Corporate Menu Bottom
Standard page bottom links appearing globally across the website
-Home: Link to homepage
-Terms of Use: Link to generic terms of use statement page
-Privacy Policy: Link to generic terms of use privacy policy page
-Submission Guidelines: Addition informaion about how to submit to the website

Browse Navigation
Primary website browsing navigation which is generated using the Categories model table.

-Mods: Scripted mods
-Interface: Mods which change interface appearence
-Gameplay: Mods which change gameplay rules
-Builder: Mods which change craft construction behaviour
-Tutorials: Additional user-generated tutorials
-Files: Addtional files which enhance gameplay
Sound: Sound files/packs
Texture: Texture files/packs
Config: Custom configuration files
-Parts: Custom parts to use n the building interface to add to craft files
-Propulsion: Engines and control parts that use fuel
-Fuel: Fuel containers
-Airplane parts: Wings, intakes and everything else belonging to palnes
-Structural: Interchangable parts that are used to hold the craft together
-Utilities: Everything else such as sciene, rover and base construction usage
-Crafts: Exchange of user creatd craft files
VAB: Vehicle assembly building carft files
SPH: Space plane hanger carft files
Subassembies: Subassembly carft files
-Apps: Third party applications to compliment gameplay
-Community: Websites created by the community
-Saved Games: Save game files

Homepage panels
-Most Popular: Summary list of most popular projects
-Top Rated: Summary list of the top rated projects
-Lastest: Summary list of the lastest created projects

Profile panels
-Projects: List of projects the user is a contributer to
-Watchlists: List of project user is watching
-Comments: List of comment made on the website

Manage Project
-create/modify
-add/update/remove file
-new version
-new dependency
-add/update/remove tag
-add/update/remove contributor
- search conrtibutor

***every upate to project requires a new version number


Search Form
Keywords
Search Filters
Rating(specific/direction)
Downloads(direction)
Version(minimum)
Categories(soud search inside category)
Tag

Browse Filters
Keywords
Rating(specific/direction)
Downloads(direction)
Version(minimum)
Tag

Mod Info
Name
Owner/person
KSP version
Created
Updated
Tags
Total Downloads
Monthly Downloads
Description
Changelog
Assets/Files
Screenshots
Related projects
More from author
-add to watchlist
-add comment
-rate project
-download


Mod summary in browse/search
Name
Owner
Downloads
Version
Rating
-add to watchlist



The way I propose this be set up is using a basic relational database and cache each project into a json file on the server. The categories should sit in the database but exist as a front-end fixture, or, joined into the api response on server query. At the front end the json object is picked up by the interface which is built accordingly as the behavioural logic dictates.

This approach will allow the interface to exist separate fron the back-end and the option is always available to go NodeJS/MongoDB sarting at the JSON cache. I have misgivings about being able to implement decent search with MongoDB. I can implement a basic dictionary search feature which builds a dictionary as data is added to the application and do weighted search results with a simple phoneme matching algorithm for misspelling. But, I'm intrigued by Lucene being able to pull results directly out of MySQL.






Front End API - actions



INTERFACE ELEMENTS

Register form
Standard registration behaviour. We can put the option of OpenID and alternative login authentication. But, we need to be able to track the user to match their activity with the rest of he database so there will have to be a user creation routine whether via the website or an API request.

Username[text]: Unique username
Password[password]: Stored with slated encryption if using local login
Email[text]: Email address of user
Alias[text]: Display name of user, optional



Login form

Standard login behaviour. Like registration we can use third party tools if desired. It's always best to add native beaviour to the application.

Username[text]: Unique username
Password[password]: Stored with slated encryption if using local login
Remember Me[checkbox]: Sets session expry to zero if checked
Reset Password[link]: Account recovery page



Account Recovery

Standard account recovery routine. Not required if using alternative login methods. Best to make functionality native anyway

Email[text]: Email address to send recovery code to



Search

Keywords[text]: Search keywords matching text



Advanced Search

Keywords[text]: Search keywords matching text
Rating: Minimum rating threshold for search results
Downloads: Minimum downloads threshold for search results
Version: Minimum game version threshold for search results
Categories[checkboxes]: Tree of category checkboxes to refine search
Add Tag[text][select][button]: Matching tags to filter search results, type tag and get list of matches, use button to add to tag list
Remove Tag[checkbox][button]: From Add Tag list as a checkbox to remove tags from search and use button to confirm action



Search Display

Search disaply is sorted by Project Name, Project Owner, Project Rating, Project Downloads, Project Modified. Thse option may exist in the Advanced Search form but, it is easier to gather all reults and do all sorting in the interface. It's a good idea to also put a widget on the browse display to add the project to our watchlist.

The display information in search results are as follows:
Project Thumbnail
Project Name
Project Owner
Project Version
Project Downloads
Project Rating
Project Summary
Project Modified



Browse Filters

Similar the the search filtering the browse filtering can be done once the data is loaded into the interface for that category.

These are the filter options.
Project Name
Project Owner
Project Rating
Project Downloads
Project Modified
Game Version
Tags



Project Display

We don't need to break away from convention for the project display page, all we are doing is putting the project database info onto the page. The only thing we need to do is add widets for rating, watchlist, commenting and editing if you are a project contributor.

Here's what we need to display for the user
Name
Version
Rating
Downloads
Category/Breadcrumb
Tags
Summary
Description
Files/Download Zip
Contributors
Comments
Changelogs
Dependencies
Contributors
Add to watchlist button/Confirm added to watchlist
Report button/Confirm reported
Rating select



Users Profile Interface

The user's profile interface will deisplay the following lists:
Projects they are a contributor to
Projects on their watchlist

The project on their watchlist will show the name, version number and the date of that version. They will have a checkbox/confirm button option to remove the project from their watchlist. The projects they are a contributor to have the option of creating a new version with the edit menu of:

Project Edit Interface

Add/remove files
Edit description
Add tags
Add changelog(required)
Add depenedcy for changelog
Add/remove contributor(if owner)
View reports on project
Add comment
Edit project images/thumb(if owner)
Edit project title(if owner)
Edit project summary(if owner)
Edit project category(if owner)



admin
*need to admin the following
-comments
-reports
-ratings
-projects
-files



RESOURCES



//static page
Router::connect('/about', array('controller' => 'pages', 'action' => 'display', 'about'));

//link to page
<?php echo $this->Html->link('Register', $this->Html->url(array('controller'=>'pages', 'action'=>'display', 'register'))); ?>


USING LIBS
If they're general standalone libraries not tied to any particular step of the request cycle (controller, model, view), put them in app/libs/. You can import them using App::import('Lib', 'Foo').

_______________________________________________________________________________

Need to create cake models
-This is my top priority
Need to do a JSON import sript for the categories.

Projects only get a limited number of tags each
_______________________________________________________________________________

File locations
Main directory is uploads

where ever the project belongs that's the dir path to follow

Need a frameowrk dir structure for files.
/ - root where the versions of the project will exist, for direct linking(master file and versioning variant crated here)
/release - old versions of the project availabl to the public
/builds - new versions of the project only available to contributors
/assets - addition files like documents to support project
/images - images for project

*you can create sub folder in the assets and images directories, not the project root.

All requests to user created files will be routed through a permission script

The changelog: when you make a change the interface forces an upload input for the newet version of the project.
project files will follow the scripted naming conventions
you choose if it is a build or a release
if release then put into releases as well
/projectname.zip
/release/projectname_version.zip
otherwise put them into the builds folder
/builds/projectname_version.zip

_______________________________________________________________________________
Models needed for cake

create categories list - this can be a helper file or module
-pull data from database, build json data
-convert to array
-push out link list
-do all highlighting etc on the fron end

create banner search form from search module

take a search request and output results as json response
-if not on serach page thy need to be directed to listing page

add some sort of suggest box on the right of the browsing section.

As you can see I've started building a forms specification but, this stuff gets done when I need a break from solving code issues.

What do you think the best option for a central doc repo is? And, more importantly, how do we get a short list of achievable goals into the faces of community members who are casually interested. My thread is my current approach, which does actually need a short-list of simple tasks people can put their hand up for.

Link to comment
Share on other sites

I've made some progress on my copy of the website. I've got a good groundwork for the mod/file relationship and metadata system in place. No management tools yet, although an administrator can create a mod in the backend with multiple files and the summary/description/website links which I've talked about a few times. Just need to build the front end management controls for it, then plug it all in throughout the website.

I made a front page slider which can be used to display some random/featured/popular mods, which you can check out on http://replaceport.com/ (or see a screenshot). It's currently just some fake items stored in an array, and will be replaced with actual database queries. But I think it's a good concept, just something pretty.

I think that if I abandon my own project, or another one wins the challenge, I would be willing to release any of these elements that I develop and possibly help get it integrated. Just throwing that out there!

Link to comment
Share on other sites

As I stated in the "Curse thread", action is what is of value.

After reading this entire thread, I do not see one needed component. A project Manager. I see a few folks stepping up to "assist" with that, but no one go to person to coordinate the effort.

I'd like to volunteer. I will go thru the documentation provided to date, mash it all together, and make sense of it.

We can then get together to "trash it" and make it better.

Then we can start working on divvying up the work, once we have decided on a path, and a code base from the "competition".

I'm not proposing to decide anything. Only to ensure that "decisions" get made, help with coordinating everyone's effort, answering the numerous questions (when needed) and helping with coding where I can, writing where I can, and thinking of things like Software Life cycle and maintenance, scaling, language support, etc.

If we want to do this, let's do it right and get a plan on "paper" that we can track to and know if we are successful.

Thoughts?

Edited by Papa_Joe
Link to comment
Share on other sites

As I stated in the "Curse thread", action is what is of value.

After reading this entire thread, I do not see one needed component. A project Manager. I see a few folks stepping up to "assist" with that, but no one go to person to coordinate the effort.

I'd like to volunteer. I will go thru the documentation provided to date, mash it all together, and make sense of it.

+1, for just about any part of your post. Coordinating things is hard - thank you.

Link to comment
Share on other sites

I'm back. Real life happened*, but now I have some free time again.

Where's everyone got up to? This thread seems to have become a little quiet.

there should be a low barrier to entry for casual people to drop off some work and go on their merry way. There's potentially a lot of people who could get inspired and do 30min - 1hr work on it and that's all.

I've thought a lot about how to do this, but didn't decide on anything before my 'break'. I think now I'm going to use GitHub's repo wiki feature, which uses markdown. My aim (when I figure out how) will be to allow anyone with a GitHub account to edit documents. GitHub should provide revision control, so anything awful should be reversible anyway.

What do you think the best option for a central doc repo is? And, more importantly, how do we get a short list of achievable goals into the faces of community members who are casually interested. My thread is my current approach, which does actually need a short-list of simple tasks people can put their hand up for.

Again, I would vote for a wiki, and I don't see anything lower maintenance than GitHub's wiki feature.

Someone please let me know if all this is old information now, but otherwise I'm going to proceed to do some updates for http://medavox.github.io/ .

Man, I namedrop GitHub a lot.

*Turns out my department has coursework planned for me right until the end of term, after the exams, which is unusual... Also had my fiancee's birthday, which involved a trip to see family for a few days... You get the picture.

Edited by medavox
wording
Link to comment
Share on other sites

I've been busy at work, but I still do some development on the weekends or if I still have enough energy after a full day. Still no front-facing mod upload feature, so it's not really worth mentioning anything yet. The site I have uses WordPress for administration & content management, but the login and user system will be front end. Except for administrators, nobody will even realize it's built with WordPress. Although the mod repository API will be accessed outside of WordPress (PHP -> MySQL directly).

I've got an AJAX-driven API which is in use for the login/registration system (registration will not create your account yet, that is disabled for now). This API will carry over for the mod repository as well. The API can be used outside of the website at some point (ie, your own program can use it), but for right now it can allow you to make small edits via popup instead of redirecting to new pages.

http://replaceport.com/

Link to comment
Share on other sites

Thought I'd add a second post with new info.

I just looked at the GitHub wiki thing, and it's extremely satisfactory. Plus, as an added bonus, I can already edit O-Doc's ReplacePort project wiki (what with being logged in), so it has that low barrier to entry for casual contributors.

In the interests of combined effort and initiative, I'm going to:-

  1. Migrate the useful info from http://medavox.github.io/ to the project wiki at http://github.com/monkey100/replaceport/wiki
  2. Start building that wiki into the central documentation repository, easily editable, that O-Doc mentioned. That we need.

So what can someone who knows no coding, or anything technical when it comes to webdesign, help out in this process? :)

Rassa Farlander, this would be a great thing for you to get involved with :) just add any info you can find, make it more readable. The more contributors this wiki has, the better it will be, so everyone: follow the usual wiki procedure:

People with subject knowledge: dump and run! (don't worry about formatting, just put what you know)

Other helpful people: tidy it up, make it more readable.

O-Doc, is this cool? I'm thinking of posting this in your thread too.

Link to comment
Share on other sites

I've got an AJAX-driven API which is in use for the login/registration system (registration will not create your account yet, that is disabled for now). This API will carry over for the mod repository as well. The API can be used outside of the website at some point (ie, your own program can use it), but for right now it can allow you to make small edits via popup instead of redirecting to new pages.

http://replaceport.com/

That's looking sweet! I've got more or less the same setup with a JSON API. The page request spits out all the interface markup then goes back to the server for the data to populate the interface. This means you can use the website as a web service. Have you got a defined API document for your project? I'd be interested to ply my MkI eyeball onto it.

Thought I'd add a second post with new info.

I just looked at the GitHub wiki thing, and it's extremely satisfactory. Plus, as an added bonus, I can already edit O-Doc's ReplacePort project wiki (what with being logged in), so it has that low barrier to entry for casual contributors.

...

O-Doc, is this cool? I'm thinking of posting this in your thread too.

Nice solution. Let me know what you need from me to set it up. My project is moving through implementation pretty smoothly. I'm at the API request layer. I have the basic webpage request then data population coming down the pike OK. I've integrated NBBC into the database layer for all user comments and I'll throw in a custom implementation of TinyMCE for the WYSIWYG editor. I'm using Sphinx for the search engine but, I may hold off from doing that until late in the implementation once I know all the data is moving correctly in and out of the database through the API.

I haven't pushed my code to git yet. I've started to become mindful of security and not sure about publicly posting code particularly when I have comments about points of possible vulnerabilities. :)

At this point in time I think I'll switch my repo over to private and make public the site on request. All the setup assets are in place so anyone who wants to code can get a pretty easy install up and running.

Link to comment
Share on other sites

Nice solution. Let me know what you need from me to set it up.

I just wanted to make sure I wasn't working with outdated information, as it had been about a week since any posts were made.

Since you've uploaded to GitHub, I want to make the documentation there the authoritative copy, and move as much of it as possible to the wiki for easier editing (the non-code sections, ie not en.php) by casual contributors.

My project is moving through implementation pretty smoothly...

That's good news :) I code primarily on the desktop and mobile, in Java, Python and Android, so while I can talk the talk, as it were, I'm not so hot with walking the webdev walk. Everything you said sounds sane. If we need to re-implement later, then that's for later. As everyone said earlier, what matters now is that there IS a working implementation to deploy.

Then we can go about the hard work of gathering community support.

I haven't pushed my code to git yet. I've started to become mindful of security and not sure about publicly posting code particularly when I have comments about points of possible vulnerabilities. :)

At this point in time I think I'll switch my repo over to private and make public the site on request. All the setup assets are in place so anyone who wants to code can get a pretty easy install up and running.

This does not sound ideal. Security through obscurity is not a good model to build a robust community service on. This is a community effort, and we need to make this project available to the community, so we can get more eyes on the code, fixing bugs etc.

By all means, restrict access to critical areas -- like, I don't know, account authorisation and database access. Keep them off GitHub. But I think the majority of the site would be better off hosted somewhere everyone can see it, and help improve it directly, rather than going through an individual. It's all about that low barrier to entry for random people to help :)

What source code management system have you been using so far?

(Btw I'm sorry if I sound argumentative or anything. I just prefer to state my opinions directly, somewhat like you.)

Rather than brashly argue my point on a forum, here's an article.

Open Source Versus Closed Source Security

I think it's fair, and doesn't just blithely back me up.

Just remember about that low barrier to entry for contributors! :)

In the meantime, I'm going to continue building up the wiki into something fairly useful (I hope).

Link to comment
Share on other sites

I need a WYSIWYG editor like the one you use to post here. Unless I'm missing something, ACE looks like a syntax highlighter with range interception and modification functionality. I need BBCode compatible buttons for adding post formatting, highlighting, links, etc. Since I've been using NBBC and TinyMCE together for a decade I'll default to those unless a seriously good argument(and possible help with implementation) is put forward.

Link to comment
Share on other sites

This does not sound ideal. Security through obscurity is not a good model to build a robust community service on.

...

By all means, restrict access to critical areas -- like, I don't know, account authorisation and database access. Keep them off GitHub.

Aren't you just contradicting yourself here? Anyway, I don't think it's a good idea to "hide" security sensitive code from the public, nor is it necessary. We should be able to produce a secure system while keeping *all* code in public.

I need a WYSIWYG editor like the one you use to post here. Unless I'm missing something, ACE looks like a syntax highlighter with range interception and modification functionality.

Right, Ace is not a WYSIWYG editor.

Link to comment
Share on other sites

This does not sound ideal. Security through obscurity is not a good model to build a robust community service on. This is a community effort, and we need to make this project available to the community, so we can get more eyes on the code, fixing bugs etc.

I changed my mind earlier today and did the first code commit. Included are the documents and templates folders in the project commit. In terms of my version control, I don't version control until I have a solid platform under the project to get the ball rolling. I like to "play" with code architecture which involves arranging and rearranging source files until I'm happy with the beauty and symmetry of the code base. Then I can trust it to commit and allow external exploration. That's more a style thing on my behalf. Hey, it works for me.

Link to comment
Share on other sites

As a huge mod user (cant sort mind out enough to write anything recently) I think this is a great idea. Kudo's Majiir for doing this (& Kethane ofc).

I have not read all 28 pages of this thread, but could someone point me (if they know) to the latest idea on rating/s? The reason I ask this is that playing around with new mods and also finding new mods can be a real pain on Spaceport/curse, therefore having something that allows users to give a simple rating to their preferences would be immensely useful as allows a ranking (if that is possible within KISS principle)?

I hope that the community can come through once more on KSP and fill the voids/oversights/gaps/etc Squad has left.

Link to comment
Share on other sites

This thread is quite old. Please consider starting a new thread rather than reviving this one.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...